1. 程式人生 > 實用技巧 >1064 朋友數 (20分)

1064 朋友數 (20分)

題目

如果兩個整數各位數字的和是一樣的,則被稱為是“朋友數”,而那個公共的和就是它們的“朋友證號”。例如 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];
    }
}