难住本小白的一道c语言题目,搞了两天才出来,不多比比,直接上题
题目:输入n个整数,输出不重复整数及它们的和。
//讲真,当时那道题,读了两遍愣是没懂······
此题笔者认为有两个难点,
1.“如何输入n个整数”,当按下回车键时结束输入,其中n是不定的,(不能要求先输入n的值,那样难度直接降低)
ps:如果是字符的话,直接用s[i]!=’\n’就行,其中s[i]是字符数组的某一个元素
但是本题是整数啊,是整数!当然如果说你用某一个整数来作为结束的标志,虽然可以,但是并不能令人满意
2.“如何删除重复的数”,笔者的思路是把不重复的数放进另一个数组,肯定会有别的思路,敬请指教,这个难点主要是逻辑上的问题,不说了直接上代码
#include<stdio.h>
int main()
{int a[10],b[10],i=0,j=0,k=0,m=0,sum=0;
char ch;
int flag;
do
{
scanf("%d",&a[i]);
i++;
}while((ch=getchar())!='\n');
k=i;
for(i=0;i<k;i++)
{for(j=0;j<k;j++)
{if((a[i]==a[j])&&(i!=j))
{flag=1;
break;
}
else if((a[i]==a[j])&&(i==j))
{flag=0;
break;
}
else
{flag=0;
}
}
if(flag==0)
{b[m]=a[i];
m++;}
}
for(i=0;i<m;i++)
{sum=sum+b[i];
}
for(i=0;i<m;i++)
{printf("%d ",b[i]);
}
printf("它们的和为:%d",sum);
return 0;
}
其中第一个难点是用while((ch=getchar())!=’\n’);实现的,好吧,我承认,这是在网上看到的,竟然没想到getchar()有如此奇效。第二个难点就是for循环里的,其实也算不上很难,就是逻辑上有些不好想,(尤其是我这样的新手)。
----------------------------------------------------分割线--------------------------------------------------------
下面在提供一种方法,不是笔者写的,宿友的一个同学的作品,必须承认,虽然笔者不太懂,但是这个代码很简洁,就是有一个问题,当输入个数在4个及4个以下时,是无法结束的,直接放代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{int a[10],b[5];
int sum=0;
int i;
memset(a,0,sizeof(a));
for(i=0;i<5;i++)
{scanf("%d",&b[i]);
}
for(i=0;i<5;i++)
{if(a[b[i]]==0)
{printf(" %d",b[i]);
sum+=b[i];
a[b[i]]=1;
}
}
printf("\n%d",sum);
return 0;
}
希望某个大佬解释下吧······就写到这了,