|
发表于 2009-11-6 01:20:51
|
显示全部楼层
IP:江苏扬州
我有一种想法,不知道是否正确:
按顺序找出每整数及其相差绝对值最小的整数,让它们配对。
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
#define MAX 10
#define GREATEST 858993460
typedef struct
{
int elem;
bool used;
}Number;
void Choose(Number *num, int *agroup, int *bgroup)
{
int n = 0,a = 0, b = 0;
int finish = 0;
int compare;
int id;
int length = MAX;
int halfLength = length/2;
do
{
if(!num[n].used)
{
num[n].used = true;
compare = GREATEST;
agroup[a] = num[n].elem;
a++;
for(int i = n + 1; i < length; i++)
{
int com = num[n].elem - num[i].elem;
com = (com < 0)?(-com):com;
if(compare > com)
{
compare = com;
id = i;
}
}
num[id].used = true;
bgroup[b] = num[id].elem;
b++;
}
n++;
finish++;
}
while(finish <= halfLength);
}
void main()
{
Number *num = new Number[MAX];
int *a = new int[MAX/2];
int *b = new int[MAX/2];
srand( (unsigned) time(NULL));
for(int i = 0; i < MAX; i++)
{
num[i].elem = rand()%100;
num[i].used = false;
}
Choose(num, a, b);
cout<<"the result is:"<<endl;
cout<<"a : ";
for(i = 0; i < MAX/2; i++)
cout<<" "<<a[i]<<" ";
cout<<endl<<"b : ";
for(i = 0; i < MAX/2; i++)
cout<<" "<<b[i]<<" ";
} |
|