PAT甲級題目記錄總結(C++語言)
阿新 • • 發佈:2018-12-15
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:總覺得程式碼太重,歡迎大神指正