1064 朋友數 (20分)
阿新 • • 發佈:2020-08-07
題目
如果兩個整數各位數字的和是一樣的,則被稱為是“朋友數”,而那個公共的和就是它們的“朋友證號”。例如 123 和 51 就是朋友數,因為 1+2+3 = 5+1 = 6,而 6 就是它們的朋友證號。給定一些整數,要求你統計一下它們中有多少個不同的朋友證號。
輸入格式
輸入第一行給出正整數 N。隨後一行給出 N 個正整數,數字間以空格分隔。題目保證所有數字小於 10^4。
輸出格式
首先第一行輸出給定數字中不同的朋友證號的個數;隨後一行按遞增順序輸出這些朋友證號,數字間隔一個空格,且行末不得有多餘空格。
輸入樣例
8
123 899 51 998 27 33 36 12
輸出樣例
4 3 6 9 26
解析
陣列a儲存每個不同的朋友數,b標識這個朋友數是否出現過,對於每個數字按以字串讀取然後每位求和為sum&emsp 如果b[sum] == 0表示這是一個新的朋友數,需要進行記錄,儲存進a[an],用an表示朋友數得個數,將儲存朋友數得a排序一下輸出即可
答案
#include<iostream> #include<algorithm> #include<string> using namespace std; int an,a[10001]; bool b[10001]; int main(){ int N; string s; cin >> N; while(N--){ cin >> s; int sum = 0; for(int i = 0 ; i < s.length() ; i ++){ sum += s[i] - '0' ; } if(!b[sum]){ a[an++] = sum; b[sum] = 1; } } cout << an << endl; sort(a,a+an); for(int i = 0 ; i < an ; i++){ if(!i) cout << a[i]; else cout << " " << a[i]; } }