- 论坛徽章:
- 0
|
将两个数组并在一起升序排序后,交叉取值,即第奇数个数放在一个数组中,第偶数个数放在另一个数组中,然后计算每个数组的和再相减。因为排序后相邻两个数字相差上最小的,这是我的认为:
- #include <stdio.h>
- #include <string.h>
- void
- main ()
- {
- int arr[5] = { 1, 5, 10, 3, 8 };
- int brr[5] = { 2, 4, 3, 6, 9 };
- int index, jndex, temp, t, crr[10];
- for (index = 0; index < 10; index++)
- {
- if (index < 5)
- {
- crr[index] = arr[index];
- }
- else
- {
- crr[index] = brr[index - 5];
- }
- //printf ("%d\t", crr[index]);
- }
- //printf ("\n");
- for (index = 0; index < 10; index++)
- {
- for (jndex = 0; jndex < index; jndex++)
- {
- if (crr[index] <= crr[jndex])
- {
- temp = crr[index];
- crr[index] = crr[jndex];
- crr[jndex] = temp;
- }
- }
- }
- #if 0
- for (index = 0; index < 10; index++)
- {
- printf ("%d\t", crr[index]);
- }
- printf ("\n");
- #endif
- for (index = 0; index < 10; index += 2)
- {
- arr[index / 2] = crr[index];
- brr[index / 2] = crr[index + 1];
- }
- #if 0
- for (index = 0; index < 5; index++)
- {
- printf ("%d\t", arr[index]);
- }
- printf ("\n");
- for (index = 0; index < 5; index++)
- {
- printf ("%d\t", brr[index]);
- }
- printf ("\n");
- #endif
- t = 0;
- for (index = 0; index < 5; index++)
- {
- t += (brr[index] - arr[index]);
- }
- printf ("The result is %d\n", t);
- }
复制代码 测试:
myz@ubuntu:~$ gcc test.c -o test
myz@ubuntu:~$ ./test
The result is 5 |
|