如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。
输入格式:
输入第一行给出正整数 N。随后一行给出 N 个正整数,数字间以空格分隔。题目保证所有数字小于 104。
输出格式:
首先第一行输出给定数字中不同的朋友证号的个数;随后一行按递增顺序输出这些朋友证号,数字间隔一个空格,且行末不得有多余空格。
输入样例:
8
123 899 51 998 27 33 36 12
// 结尾无空行
输出样例:
4
3 6 9 26
// 结尾无空行
解题思路:
遍历每个数字,将数字拆分成数组后计算和 — 朋友数。判断friendNum中是否存在当前计算的,没有就加入。
解题代码:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let N = 0;
let friendNum = [];
let numArr = [];
rl.on('line', function(line) {
if(N === 0) {
N = parseInt(line)
} else {
numArr = line.split(' ');
}
});
rl.on('close', function() {
for(let i = 0; i < N; i++) {
let numStr = numArr[i].split('');
let num = 0;
for(let j = 0; j < numStr.length; j++) {
num += parseInt(numStr[j]);
}
if(friendNum.indexOf(num) < 0) {
friendNum.push(num);
}
}
friendNum.sort(function(a, b) {
return a - b;
});
console.log(friendNum.length);
console.log(friendNum.join(' '));
})