- 论坛徽章:
- 0
|
基本思路:尝试更换两个数组中的值,直到更换任何一个都不能使它们的差的绝对值更小的时候。
#include <iostream>
int sun(int in[], int n)
{
int sun = 0;
for(int i=0;i<n;i++) {
sun += in;
}
return sun;
}
int trychange(int a[], int b[], int n)
{
int i=0, j=0;
int sub = sun(a, n) - sun(b, n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
int tmp;
tmp = a;
a = b[j];
b[j] = tmp;
int newsub = sun(a, n) - sun(b, n);
if(abs(newsub) < abs(sub)) {
return 1;
}
else {
tmp = a;
a = b[j];
b[j] = tmp;
}
}
}
return 0;
}
void printnum(int in[], int n)
{
for(int i=0;i<n;i++) {
printf("%d ", in);
}
}
void init(int in[], int n)
{
for(int i=0;i<n;i++) {
in = rand()%100;
}
}
main(int argc, char* argv[])
{
int n=8;
if(1 == argc) {
n=8;
}
else {
n = atoi(argv[1]) % 100 +1;
}
srand(time(NULL));
int a[100];
int b[100];
init(a, n);
init(b, n);
while(sun(a, n) != sun(b, n)) {
if(0 == trychange(a, b, n)) {
break;
}
}
printf("\na: ");
printnum(a, n);
printf("\t\tsun a: %d\n", sun(a, n));
printf("b: ");
printnum(b, n);
printf("\t\tsun b: %d\n", sun(b, n));
} |
|