失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【C语言】合并两个数组 降序排列并删除重复元素(通俗易懂)

【C语言】合并两个数组 降序排列并删除重复元素(通俗易懂)

时间:2020-08-09 09:28:42

相关推荐

【C语言】合并两个数组 降序排列并删除重复元素(通俗易懂)

【问题描述】

试着写一个程序,具体内容如下:

建立两个整型数组(int n;scanf(“%d”,&n);int a[n]),将其合并,对他们进行降序排序,去掉相同项,输出处理过后的数组。

【输入形式】

首先第一行输入第一个数组中的长度n,然后输入n个整型数;

然后在第二行输入第二个数组中的长度m,然后输入m个整型数;

【输出形式】

输出降序排列,并且去掉多余元素后的数组。

【样例输入】

5

5 4 3 2 1

5

10 8 6 4 2

【样例输出】

10 8 6 5 4 3 2 1

【样例说明】

每个元素之间都用空格隔开,最后一个元素仍有空格。

总体思路为:1.将两数组中相同元素多余项赋为0,只留其中一项

2.合并两数组

3. 考虑还有同一数组中有相同项情况,将合并后数组中相同元素多余项赋为0,只留其中一项

4. 将数组降序排序,此时0都在末尾

5. 数0的个数

6. 遍历到多余0之前的位置,依次输出

代码如下:

#include <stdio.h>int main(int argc, char* argv[]){ int m, n, i, j, t, temp, x;int s1[20], s2[20], s[40];//建立两个整型数组,并输入scanf("%d", &n);for (i=0; i<n; i++){scanf("%d", &s1[i]);}scanf("%d", &m);for (j=0; j<m; j++){scanf("%d", &s2[j]);}//将两数组中相同项取0,只留相同项中一项 if (n<m) {for (i=0; i<n; i++){for (j=0; j<m; j++){if (s1[i]==s2[j]){s1[i] = 0;}}}}else{for (j=0; j<m; j++){for (i=0; i<n; i++){if (s1[i]==s2[j]){s1[i] = 0;}}}}//将两数组合并 for (i=0; i<n; i++){s[i] = s1[i];}t = i;for (j=0; j<m; j++){s[j+t] = s2[j];}//将合并后数组中的相同项取0,只留相同项中一项 for (i=0; i<m+n; i++){x = s[i];for (j=i+1; j<m+n; j++){if (s[j]==x){s[j] = 0;}}}//将数组排序(将0都排在最后) for (i=0; i<m+n-1; i++){int count = 0;for (j=0; j<m+n-i-1; j++){if (s[j]<s[j+1]){temp = s[j];s[j] = s[j+1];s[j+1] = temp;count = 1;}}if (count == 0){break;}}//数末尾0的个数 t = 0;for (i=0; i<m+n; i++){if(s[i]==0){t++;}}//遍历到多余0之前的位置 for (i=0; i<m+n-t; i++){printf("%d ", s[i]);}return 0;}

博主为初学者,方法较为基础,仅供参考,如有更好方法,欢迎评论区多多交流^ ^

如果觉得《【C语言】合并两个数组 降序排列并删除重复元素(通俗易懂)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。