【简便代码】1064 朋友数 (20分)_25行代码AC
生活随笔
收集整理的這篇文章主要介紹了
【简便代码】1064 朋友数 (20分)_25行代码AC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立志用更少的代碼做更高效的表達
Pat乙級最優化代碼+題解+分析匯總——>傳送門
如果兩個整數各位數字的和是一樣的,則被稱為是“朋友數”,而那個公共的和就是它們的“朋友證號”。例如 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
思路解析
1、使用while+求余+相除求出各個位數和
2、利用桶排序思想, 定義一個值為0的數組, 將對應下角標為朋友證號的數組值置為1,同時統計個數。(去重+排序,時間復雜度為O(n))
3、輸出即可
#include<bits/stdc++.h> using namespace std; int a[100] = {0}; int main() {int n, num = 0; cin >> n; //num是次數 for(int i = 0; i < n; i++) {int x; cin >> x;int sum = 0;while(x) {sum += x%10;x /= 10;}if(a[sum] == 0) { a[sum]=1; num++; }}bool flag = false;cout << num << '\n';for(int i = 0; i < 300; i++) {if(a[i] == 1) {if(flag == true) cout << ' ';cout << i;if(flag == false) flag = true;}}return 0; }
耗時
總結
PAT乙級中,有相當多包含去重+排序的題, 只要掌握桶排序原理,會很輕松的解出。
總結
以上是生活随笔為你收集整理的【简便代码】1064 朋友数 (20分)_25行代码AC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【简便代码】1063 计算谱半径 (20
- 下一篇: 【高效解法】1065 单身狗 (25分)