1. 程式人生 > >PAT甲級題目記錄總結(C++語言)

PAT甲級題目記錄總結(C++語言)

1120 Friend Numbers

題目翻譯:

   如果兩個整數各位數之和相等,那麼這兩個數稱為“friend numbers”,和稱為“friend ID”。例如,123和51就是“friend numbers”,因為1+2+3=5+1=6,6為“friend ID”。現在,給你幾個數,要求計算出他們中不同的friend ID。
   輸入格式:每個輸入檔案包含一個測試用例,每個用例第一行輸入一個正整數N,下一行輸入N個正整數,用空格隔開,所有的數都小於10000.
   輸出格式:對於每個用例,第一行輸出輸入數字中不同的friend ID共有多少個。第二行以從小到大的順序輸出friend ID。每個數字用空格隔開,末尾沒有多餘的空格。
   輸入樣例:
   8
   123 899 51 998 27 33 36 12
   輸出樣例:
   4
   3 6 9 26

解題思路

  1.將輸入的數存放在陣列中,計算出friend ID,存放到另一個數組中
  2.使用sort語句進行排序
  3.尋找不相同的friend ID,並存放到陣列中
  4.將陣列輸出即可得到結果

程式碼

 #include<stdio.h>
 #include<algorithm>
 using namespace std;
 int main(){
 	int n,number=0;
 	scanf("%d",&n);
 	int num[n],fr[n],frd[n];
 	for(int i=0;i<n;i++){
 		scanf("%d",&num[i]);
   		}//輸入,將輸入的數字儲存到陣列num中 
 	for(int j=0;j<n;j++){
   		fr[j]=0;
   		while(num[j]){
   			fr[j]=fr[j]+num[j]%10;
   			num[j]=num[j]/10;
   				}
			}//將輸入的數字各位數相加,儲存到陣列fr中 
sort(fr,fr+n);//STL中的標準排序函式 
int m=0;
while(m<n){ 
	frd[number]=fr[m];
	if(fr[m]!=fr[m+1]) number++;
	m++;
	}//統計friend numbers,並將friend ID存到frd陣列中 
printf("%d",number);
printf("\n");
for(int k=0;k<number-1;k++){
	printf("%d ",frd[k]);
	}//輸出 
printf("%d",frd[number-1]);
return 0;
}

PS:總覺得程式碼太重,歡迎大神指正