题目如下:
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
- A1 = 能被 5 整除的数字中所有偶数的和;
- A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;
- A3 = 被 5 除后余 2 的数字的个数;
- A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
- A5 = 被 5 除后余 4 的数字中最大数字。
输入格式:
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。
输出格式:
对给定的 N 个正整数,按题目要求计算 A1~A5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若分类之后某一类不存在数字,则在相应位置输出 N
。
输入样例 1:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出样例 1:
30 11 2 9.7 9
输入样例 2:
8 1 2 4 5 6 7 9 16
输出样例 2:
N 11 2 N 9
解答如下:
首先非常重要的一点是输入的第一个数字是数字的个数,不参与计算,要把它去掉。读题!!!!!看了好久才发现,真的要认真读题
然后再就是JavaScript小数精度的问题,查到了可以使用number.toFixed()方法,参数为想保留小数的位数
其他都很简单啦,就是一个判断处理,然后用了一个数组存对应的数字个数,个数为0的输出N
over
var readline = require('readline');
rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function(data) {
var arr = data.split(' ');
arr.shift(); //去掉第一个数
console.log(deal(arr).join(' '));
})
function deal(input) {
var arr = [];
for(var i = 0; i < input.length; i++) {
arr.push(parseInt(input[i]));
}
var result = [0, 0, 0, 0, 0];
var arrayNum = [0, 0, 0, 0, 0]; //存某一类的数字的个数
var a;
var max = 0;
for(var i = 0; i < arr.length; i++) {
var n = arr[i] % 5;
if(n == 0) {
if(arr[i] % 2 == 0) {
arrayNum[0]++;
result[0] += arr[i];
}
} else if(n == 1) {
arrayNum[1]++;
if(arrayNum[1] % 2) {
result[1] += arr[i];
} else {
result[1] -= arr[i];
}
} else if(n == 2) {
arrayNum[2]++;
result[2]++;
} else if(n == 3) {
arrayNum[3]++;
result[3]+= arr[i];
} else if(n == 4) {
arrayNum[4]++;
if(arr[i] > max) {
max = arr[i];
}
result[4] = max;
}
}
if(arrayNum[3]) {
result[3] = result[3]/arrayNum[3];
result[3] = result[3].toFixed(1);
}
for(var i = 0; i < result.length; i++) {
if(arrayNum[i]==0) {
result[i] = 'N';
}
}
return result;
}