C语言 习题 输入n个数,输出不重复的数及它们的和

难住本小白的一道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;
}

希望某个大佬解释下吧······就写到这了,

猜你喜欢

转载自blog.csdn.net/weixin_43918004/article/details/84791547