PAT-B 1064 朋友數

Enjoy_process發表於2019-02-25

                                                PAT-B 1064 朋友數

                  https://pintia.cn/problem-sets/994805260223102976/problems/994805267416334336

 

 

題目

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

分析

使用字串接收資料。

C++程式

#include<iostream>
#include<string>

using namespace std;

const int N=37;//所有數字都小於10^4因此每個數字各位之和小於等於36(9999) 
bool a[N];

int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		string s;
		cin>>s;
		int id=0;
		for(int i=0;i<s.length();i++)
		  id+=s[i]-'0';
		a[id]=true;//有朋友證號 id 
	}
	int num=0;
	for(int i=0;i<N;i++)
	  if(a[i])
	    num++;
	cout<<num<<endl;
	bool flag=false;
	for(int i=0;i<N;i++)
	{
		if(a[i])
		{
			if(flag) cout<<" ";
			cout<<i;
			flag=true;//標記已經有輸出了 
		}
	}
	cout<<endl;
	return 0;
}

 

相關文章