您的位置:首页 > 其它

【程序练习】——交换两数组元素,使之和差最小

2013-10-09 09:37 239 查看
#include<stdio.h>

int main()
{
int a[5] = {3,5,6,1,4};
int b[5] = {1,9,12,4,3};
int c[10];

int i,j = 0;
int k;
int tmp;
int flag;

//合并ab到c
for(i = 0; i < 5; i++)
c[j++] = a[i];

for(i = 0; i < 5; i++)
c[j++] = b[i];

//排序c
for(i = 0; i < 10; i++)
{
j = i;
for(k = i + 1; k < 10; k++)
{
if(c[j] > c[k])
j = k;
}

if(j != i){
tmp = c[j];
c[j] = c[i];
c[i] = tmp;
}
}

//用取头尾的方式对ab进行重新赋值
j = 0;
k = 0;
flag = 0;                        //创建一个标志
for(i = 0; i < 10 / 2; i++){                //一次循环只能执行一次取头取尾,取完就要跳出
if(j != 5){
a[j++] = c[i];                //因为数组ab的长度都是5,而1取头尾的方法一次性取了两个,所以需要一个标志
flag = 0;
}
if(j != 5){
a[j++] = c[10 - i - 1];
flag = 1;
continue;                    //当a已经存满后并且已经取过尾了,要跳出此次循环,避免下面的b数组重复取数
}

//对两个标志和数组长度进行判断
if(j == 5 && k != 5 && flag == 0){

b[k++] = c[10 - i - 1];
flag = 1;                        //因为上个语句是在a取完头之后数组满了,需要数组b取尾,此语句只能执行一次,所以要修改标志,并跳出此次循环
continue;
}
if(j == 5 && k != 5 && flag == 1){
b[k++] = c[i];
b[k++] = c[10 - i - 1];
}
}

for(i = 0; i < 10; i++)            //打印合并并排好序的数组c
printf("%d\t",c[i]);

putchar('\n');

for(i = 0; i < 5; i++){            //打印重新分配的数组a
printf("%d\t",a[i]);
}

putchar('\n');

for(i = 0; i < 5; i++)            //打印重新分配的数组b
printf("%d\t",b[i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐