- 论坛徽章:
- 0
|
整体排序,然后交叉取数,每次把大数放入和比较小的那个数组里面。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ARRAY_SIZE 10
void generate_n(int *a, int num)
{
int i = 0;
for(i = 0 ; i < num; i++)
a[i] = rand() % 1000;
}
int sum_n(int *a, int num)
{
int i = 0, result = 0;
for(i = 0 ; i < num; i++)
result += a[i];
return result;
}
void print_n(int *a, int num){
int i =0;
for(i = 0; i< num; i++)
printf("%d ",a[i]);
printf("\n");
}
int cmp(int *a, int *b)
{
if (*a < *b)
return 1;
if(*a > *b)
return -1;
return 0;
}
int main(){
int a[ARRAY_SIZE];
int b[ARRAY_SIZE];
int c[ARRAY_SIZE *2];
int i= 0;
int *max = 0;
int *min = 0;
int count = 0;
srand(time(NULL));
generate_n(a,ARRAY_SIZE);
generate_n(b,ARRAY_SIZE);
printf("a is ");
print_n(a,ARRAY_SIZE);
printf("b is ");
print_n(b,ARRAY_SIZE);
printf("sum of a is %d\n", sum_n(a,ARRAY_SIZE));
printf("sum of b is %d\n", sum_n(b,ARRAY_SIZE));
printf("absolute of (sum(a) - sum(b)) is %d\n", abs(sum_n(a,ARRAY_SIZE) - sum_n(b,ARRAY_SIZE)));
memcpy(c, a, ARRAY_SIZE*sizeof(int));
memcpy(c+ARRAY_SIZE, b, ARRAY_SIZE*sizeof(int));
printf("c is ");
print_n(c,ARRAY_SIZE * 2);
qsort(c, ARRAY_SIZE*2, sizeof(int),cmp);
printf("c is ");
print_n(c,ARRAY_SIZE * 2);
max = a;
min = b;
for(i = 0; i < ARRAY_SIZE * 2; i+=2){
*max = c[i];
*min = c[i+1];
count ++;
if(sum_n(a,count) >= sum_n(b,count)){
max = &b[count];
min = &a[count];
}
else{
max = &a[count];
min = &b[count];
}
}
printf("a is ");
print_n(a,ARRAY_SIZE);
printf("b is ");
print_n(b,ARRAY_SIZE);
printf("sum of a is %d\n", sum_n(a,ARRAY_SIZE));
printf("sum of b is %d\n", sum_n(b,ARRAY_SIZE));
printf("absolute of (sum(a) - sum(b)) is %d\n", abs(sum_n(a,ARRAY_SIZE) - sum_n(b,ARRAY_SIZE)));
return 0;
} |
|