求一简单算法(20行),在线等!
随机生成100个数存入数组,在不添加额外数组的情况下把奇数放左边的数组 偶数放右边的数组 问题点数:50、回复次数:15Top
1 楼mccxj(老鼠不逛街)回复于 2005-06-04 11:50:01 得分 0
等等。。。把奇数放左边的数组 偶数放右边的数组。。一个数组的左边和右边??Top
2 楼chendaiyin(freeman)回复于 2005-06-04 11:55:10 得分 0
别人问的一个数据结构的题目,这是有人写的:
#include <stdlib.h>
#include"iostream.h"
void main()
{
int x[100];
unsigned int n=1234;
unsigned int y;
int NUM;
cout << "Input the random number :" << endl;
cin >> NUM;
srand(NUM);
cout<<endl<<"the random number"<<endl;
for(int i=0;i<100;i++)
{ y=rand( );
int temp = y%1234;
x[i]=temp;
}
for( i=0;i<100;i++)
{cout<<x[i]<<" ";
if(i%20==0) cout<<endl;
}
cout<<endl<<endl<<"Even number:";
for( i=0;i<100;i++)
{ if(x[i]%2==0) cout<<x[i]<<" ";
if(i%20==0) cout<<endl;
}
cout<<endl<<endl<<"Odd number:";
for( i=0;i<100;i++)
{ if(x[i]%2!=0) cout<<x[i]<<" ";
if(i%20==0) cout<<endl;
}
}
写个不一样的就可以了Top
3 楼naturemickey(米老鼠)回复于 2005-06-04 12:00:55 得分 8
#include <iostream>
#include <cstdlib>
int main(void){
int a[100], n;
srand(0);
for(int i = 0, j = 0, k = 50; i < 100;)
{
n = rand();
if(n % 2 && j < 50)
{
a[j] = n, ++j, ++i;
}
else if(k < 100){
a[k] = n, ++k, ++i;
}
}
return 0;
}Top
4 楼mccxj(老鼠不逛街)回复于 2005-06-04 12:04:27 得分 8
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iomanip.h>
const int MAX=100;
int main()
{
int a[MAX];
int temp,left=0,right=MAX-1;
srand( (unsigned)time( NULL));
for(int i=0;i<MAX;i++)
{
temp=rand();
if(temp%2==0) {a[right]=temp;right--;}
else {a[left]=temp;left++;}
}
for(i=0;i<MAX;i++)
{
cout<<setw(7)<<a[i];
if((i+1)%10==0) cout<<endl;
}
return 0;
}Top
5 楼yezi101(椰子)回复于 2005-06-04 12:08:34 得分 6
下面没有产生随机的数组,因为那不是主要的,只给出了算法
#include<stdio.h>
#define N 10
void main()
{
int M[N]={1,2,3,4,5,6,7,8,9,10};
int i ,j,temp;
i=0;
j=N-1;
while(i<j)
{
while(M[i]%2!=0)
i++;
while(M[j]%2!=1)
j--;
if(i<j)
{
temp=M[i];
M[i]=M[j];
M[j]=temp;
}
}
for(i=0;i<N;i++)
printf("%d ",M[i]);
}
Top
6 楼inquisitor_2(灰影子)回复于 2005-06-04 13:59:26 得分 6
void f(int p[],int left,int right)
{
int i,j;
i=left,j=left+1;
while (j<=right)
if (p[j]%2)
swap(j,++i,p);
swap(left,i,p);
}
void swap(int i,int j,int p[])
{
int tmp;
p[i]=tmp;
p[i]=p[j];
p[j]=tmp;
}
只是排列的函数,没有写主函数Top
7 楼inquisitor_2(灰影子)回复于 2005-06-04 14:01:09 得分 0
while (j<=right)
{ if (p[j]%2)
swap(j,++i,p);
j++;
}
少写了一行......Top
8 楼mostideal(三甲)回复于 2005-06-04 14:57:18 得分 0
同意 mccxj(爱逛街的老鼠) 的
就那个就不错了。。。Top
9 楼hzh_net(_风云_)回复于 2005-06-04 15:16:28 得分 6
include <stdlib.h>
#include"iostream.h"
void main()
{
int x[100];
unsigned int n=1234;
unsigned int y;
int NUM;
cout << "Input the random number :" << endl;
cin >> NUM;
srand(NUM);
cout<<endl<<"the random number"<<endl;
for(int i=0;i<100;i++)
{ y=rand( );
int temp = y%1234;
x[i]=temp;
}
for( i=0;i<100;i++)
{cout<<x[i]<<" ";
if(i%20==0) cout<<endl;
}
cout<<endl<<endl<<"Even number:";
for( i=0;i<100;i++)
{ if(x[i]%2==0) cout<<x[i]<<" ";
if(i%20==0) cout<<endl;
}
cout<<endl<<endl<<"Odd number:";
for( i=0;i<100;i++)
{ if(x[i]%2!=0) cout<<x[i]<<" ";
if(i%20==0) cout<<endl;
}
}
----------------------
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iomanip.h>
const int MAX=100;
int main()
{
int a[MAX];
int temp,left=0,right=MAX-1;
srand( (unsigned)time( NULL));
for(int i=0;i<MAX;i++)
{
temp=rand();
if(temp%2==0) {a[right]=temp;right--;}
else {a[left]=temp;left++;}
}
for(i=0;i<MAX;i++)
{
cout<<setw(7)<<a[i];
if((i+1)%10==0) cout<<endl;
}
return 0;
}
----------------------Top
10 楼SailorK(态度决定一切!)回复于 2005-06-04 16:22:30 得分 6
#include<iostream>
using namespace std;
#define MAX_SIZE 10
main()
{
int iArray[MAX_SIZE+1];
//cout<<sizeof(iArray)/sizeof(int)<<endl;
iArray[MAX_SIZE]='\0';
for(int i=0;i<=MAX_SIZE-1;i++)
{
//rand
iArray[i]=rand()%100;
cout<<iArray[i]<<" ";
}
cout<<endl;
int iFront=0,iBack=MAX_SIZE-1;
//int iTemp=0;
for(int j=0;j<=MAX_SIZE-1;j++)
{
if(iFront>=iBack) break;
if(iArray[iFront]%2)
{
iFront++;
continue;
}
if(!(iArray[iBack]%2))
{
iBack--;
continue;
}
swap(iArray[iFront],iArray[iBack]);
/*iTemp=iArray[iFront];
iArray[iFront]=iArray[iBack];
iArray[iBack]=iTemp;
*/
iFront++;
iBack--;
}
for(int k=0;k<=MAX_SIZE-1;k++)
{
cout<<iArray[k]<<" ";
}
cout<<endl;
system("\npause");
}
Top
11 楼tian_su(问天(渺小得惶恐))回复于 2005-06-04 17:36:04 得分 6
在VC6.0中可以运行
其它未知
#include "iostream.h"
#include <time.h>
#include <stdlib.h>
void main() {
int a[100];
int i=0,j=99;
int f;
srand((unsigned)time(0));
for(int d=0;d<100;d++) {
f=rand()%10000;
((f%2?1:0)==1)?(a[i++]=f):(a[j--]=f);
}
for(int e=0;e<100;e++)
cout<<a[e]<<" ";
}
呵,不到20行哦Top
12 楼gogdo(草草)回复于 2005-06-04 18:55:01 得分 2
#include "iostream"
using namespace std;
#include "iomanip"
void main()
{
int a[100];
int j,x=0;
for(int i=0,j=99; i<=j;)
{
x = rand()%100;
if(x % 2==0)
a[i++] = x;
else
a[j--] = x;
}
for(int i=0; i<100; i++)
{ if(i % 10==0)
cout<<endl;
cout<<setw(4)<< a[i];
}
}
这段CODE可以吧,请问各位高手其中在FOR循环里为什么不可以这样定义?
--for(int i=0,int j=99;i<=j;) ?????!!!!!
Top
13 楼mccxj(老鼠不逛街)回复于 2005-06-04 19:24:38 得分 0
。。。晕。。现在写code怎么都比谁的短了。。不是要清晰吗?Top
14 楼yuanarea(Sail before)回复于 2005-06-04 23:12:14 得分 0
tian_su(问天) 经典Top
15 楼foochow(无聊,灌水......)回复于 2005-06-05 00:48:00 得分 2
#include<iostream.h>
#include<time.h>
#include<stdlib.h>
int main()
{
int a[100],x,i=0,j=99;
srand(time(0));
while(i<=j)
if((x=rand()%200)%2)a[i++]=x;
else a[j--]=x;
for(i=0;i<100;++i)cout<<a[i]<<" ";
return 0;
}Top




