C语言编程 求两组整数的异或集

【问题描述】从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序输出(即两组整数集“异... 【问题描述】

从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序输出(即两组整数集“异或”)。
【输入形式】

首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上输入第二组整数,以一个空格分隔,行末有回车换行。
【输出形式】

按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现的整数,以一个空格分隔各个整数)。
【样例输入】
5 1 4 32 8 7 9 -6
5 2 87 10 1
【样例输出】

87 32 10 9 8 7 4 2 -6
【样例说明】

第一组整数为5 1 4 32 8 7 9 -6,第二组整数分别为5 2 87 10
1。将第一组和第二组整数合并(去掉在两组整数中都出现的整数5和1),并从大到小顺序排序后结果为87 32 10 9 8 7 4
2 -6。

我写的程序:
#include <stdio.h>

int paixu(int s[]);
int shanshu(int x[]);

int main()
{
int a[50] = {0};
int i = 0,j = 0,k = 0;
char c;
do
{
scanf("%d",&a[i]);
c = getchar();
i++;
}
while( c != '\n');
do
{
scanf("%d",&a[i]);
c = getchar();
i++;
}
while( c != '\n');
paixu(a);
shanshu(a);
while(a[k+2] != 0 || a[k+3] != 0)
{
printf("%d ",a[k]);
k++;
}
return 0;
}

int shanshu(int x[])
{
int i = 0,j = 0;
for(i = 0;i < 50;i++)
{
if(x[i] == x[i + 1])
{
for(j = i;j < 50;j++)
x[j] = x[j + 1];
}
}
return x;
}

int paixu(int s[])
{
int i,j,index,max;
for(i = 0;i < 50;i++)
{
max = s[i],index = i;
for(j = i + 1;j < 50;j++)
{
if(s[j] > max)
max = s[j],index = j;
}
if(index != i)
s[index] = s[i],s[i] = max;
}
return s;
}
感觉有好多问题……求大神解答,解释详细点谢谢!
展开
 我来答
百度网友07c6cf4cf
2015-12-01 · TA获得超过319个赞
知道小有建树答主
回答量:306
采纳率:100%
帮助的人:303万
展开全部

先看paixu函数……其实你知道a数组有多长,应该把这个长度当做输入传给paixu函数,让它只对这些数字排序。否则后面的0也都参与了排序,肯定会出错。

shanshu函数……好像问题不大……但是还是应该只对数组范围内的进行操作。

其实这种数组删数的操作太复杂,应该尽量避免,而且不要题让你干嘛你就干嘛,太耿直……

比如这里,排完序之后,我们不用删除数字。因为我们知道数组里一共有i个数,可以这么写:

for (k=0; k<i; )
{
    if (k == i-1 || a[k] != a[k+1])
    {
        printf("%d ", a[k]);
        k++;
    }
    else
        k+=2;
}

直接就搞定了……

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式