- 论坛徽章:
- 0
|
原帖由 s5unty 于 2006-11-13 22:43 发表
不行阿,我理解后用c实现,结果不正确,可能是我理解有问题?
- #include <iostream>
- using namespace std;
- void change(int* a, int* b) {
- int t = *b;
- *a = t;
- *b = * ...
复制代码
完整的程序是这样的,可以参考一下
- #include <stdio.h>
- #include <math.h>
- #define N 10
- void ary_init(int a[], int b[]){ //初始化数组
- int i;
- for (i=0; i<N; i++){
- a[i] = rand()%100;
- }
- for (i=0; i<N; i++){
- b[i] = rand()%100;
- }
- return;
- }
- long sum(int a[]){ //数组求和
- int i;
- int s;
- for (s=0,i=0; i<N; i++){
- s += a[i];
- }
- return s;
- }
- void change(int *a, int *b){ //数组元素交换
- int tmp;
- tmp = *a;
- *a = *b;
- *b = tmp;
- return;
- }
- void prt_ary(int a[], int b[]){ //列印两数组元素及各自元素和
- int i;
- for(i=0; i<N; i++){
- printf("%5d ", a[i]);
- }
- printf("\n");
- for(i=0; i<N; i++){
- printf("%5d ", b[i]);
- }
- printf("\n");
- printf("%d\n", sum(a));
- printf("%d\n", sum(b));
- }
- int main(){
- int i;
- int j;
- int a[N];
- int b[N];
- int a_sum;
- int b_sum;
- int tmp;
- int ab_diff;
- ary_init(a,b);//初始化
- prt_ary(a, b);//列印当前数组状态
- ab_diff = abs(sum(a)-sum(b));
- for (i=0; i<N; i++){//交换数组元素
- for (j=0; j<N; j++){
- change(a+i, b+j);
- if (abs(sum(a)-sum(b)) > ab_diff){
- change(b+j, a+i);
- }
- else{
- ab_diff = abs(sum(a)-sum(b));
- }
- }
- }
- prt_ary(a, b);//列印交换后数组状态
- getch();
- }
复制代码
[ 本帖最后由 greensky_34 于 2006-11-14 00:30 编辑 ] |
|