【问题描述】
试着写一个程序,具体内容如下:
建立两个整型数组(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;
}
博主为初学者,方法较为基础,仅供参考,如有更好方法,欢迎评论区多多交流^ ^