C語言 習題 輸入n個數,輸出不重複的數及它們的和
阿新 • • 發佈:2018-12-05
難住本小白的一道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;
}
希望某個大佬解釋下吧······就寫到這了,