C语言编程100题-8.5

8.5
输入两个整型数组(假设数组的大小为不超过10)的各个元素,输出不是两个数组共有的元素,并从小到大排序输出。
输入: 2个数组的元素(小于10个),数组中第一个数据指示元素的个数
输出:非共有的元素,从小到大排序
样例:
输入:
7 1 2 3 4 5 6 7
6 5 6 7 8 9 0
输出:
0 1 2 3 4 8 9

#include<stdio.h>
/*编这道题真的和打地鼠一样,此起彼伏的bug,how to solve this difficulty?可能是方法不太行*/
void bubblesort(int a[], int n);//函数原型
int main()
{
       int a[10]; int b[10]; int c[20],d[20];
       int n,k=0,i,j;
       scanf("%d", &a[0]);
       for (i = 1; i <=a[0]; i++)
              scanf(" %d", &a[i]);
       scanf("%d", &b[0]);
       for(i=1;i<=b[0];i++)
              scanf(" %d", &b[i]);//数组的输入
       for (i = 1; i <= a[0]; i++)
              c[i-1] = a[i];
       for (i =1; i <=b[0]; i++)
              c[i+a[0]-1] = b[i];//a、b两个数组合为一个数组c,可能是这一步的多余导致过程繁杂
       for (i = 0; i < a[0] + b[0]; i++)//往下判断数组元素是否重复,并且将不重复项赋给数组d
       {
              int w = 0;//易漏
              for (j = 0;j< a[0] + b[0]; j++)
              {
                      if (c[i] == c[j])
                             w++;//巧妙的判断
              }
              if (w==1)//等号别漏
              {
                      d[k] = c[i]; k++;//直接赋值,不用for循环,利用前面的for循环的余温
              }
       }
       bubblesort(d, k);//函数引用
       printf("%d", d[0]);
       for(i=1;i<k;i++)
              printf(" %d", d[i]);
       system("pause");
       return 0;
}
void bubblesort(int a[], int n)//定义冒泡排序函数,含指针
{
       int i, j, h;
       for (i = 0; i < n - 1; i++)//使下面的梳理顺序再次执行(最多只需执行n-1次,例如43210,经过5-1=4次梳理,可得01234)
       {
              for (j = 0; j < n - i - 1; j++)//单次梳理顺序,顺序排列(例如43210,经过1次梳理,可得32104)
              {
                      if (a[j] > a[j + 1])//数值交换
                      {
                             h = a[j + 1]; a[j + 1] = a[j]; a[j] = h;
                      }
              }
       }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值