1. 程式人生 > >C語言 習題 輸入n個數,輸出不重複的數及它們的和

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;
}

希望某個大佬解釋下吧······就寫到這了,