C++给定N个正整数从中得到下列三种计算结果

题目描述

给定N个正整数,要求你从中得到下列三种计算结果:

  • A1=能被3整除的最大整数
  • A2=存在整数K使之可以表示为 3K+1的整数的个数
  • A3=存在整数K使之可以表示为3K+2的所有整数的平均值(精确到小数点后1位)

输入格式:

输入首先在第一行给出一个正整数N,随后一行给出N个正整数。所有数字都不超过100,同行数字以空格分隔。

输出格式:

在一行中顺序输出A1、A2、A3的值,其间以1个空格分隔。如果某个数字不存在,则对应输出NONE。

输入样例1:

8

5 8 7 6 9 1 3 10

输出样例1:

9 3 6.5

编写思路

根据题目要求,我们需要从给定的N个正整数中计算出A1、A2、A3的值。

首先,我们可以遍历所有的正整数,找到能被3整除的最大整数。我们可以定义一个变量maxDivisibleBy3来保存能被3整除的最大整数,初始值为0。然后,对于每个正整数num,如果num能被3整除且大于maxDivisibleBy3,则更新maxDivisibleBy3的值为num。遍历完所有的正整数后,maxDivisibleBy3即为A1的值。

接下来,我们需要统计存在整数K使得3K+1的整数的个数,即A2的值。我们可以定义一个变量countMod1来保存满足条件的整数个数,初始值为0。然后,对于每个正整数num,如果num减去1后除以3的余数为0,则将countMod1的值加1。遍历完所有的正整数后,countMod1即为A2的值。

最后,我们需要计算存在整数K使得3K+2的所有整数的平均值,即A3的值。我们可以定义两个变量sumMod2countMod2,分别用于保存满足条件的整数之和和个数,初始值都为0。然后,对于每个正整数num,如果num减去2后除以3的余数为0,则将sumMod2的值加上num,同时将countMod2的值加1。遍历完所有的正整数后,A3的值可以通过sumMod2除以countMod2得到。

实现代码

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int N;
    cin >> N;

    vector<int> nums(N);
    for (int i = 0; i < N; i++) {
        cin >> nums[i];
    }

    int maxDivisibleBy3 = 0;
    int countMod1 = 0;
    int sumMod2 = 0;
    int countMod2 = 0;

    for (int i = 0; i < N; i++) {
        int num = nums[i];

        if (num % 3 == 0 && num > maxDivisibleBy3) {
            maxDivisibleBy3 = num;
        }

        if ((num - 1) % 3 == 0) {
            countMod1++;
        }

        if ((num - 2) % 3 == 0) {
            sumMod2 += num;
            countMod2++;
        }
    }

    // 输出结果
    cout << (maxDivisibleBy3 == 0 ? "NONE" : to_string(maxDivisibleBy3)) << " ";
    cout << (countMod1 == 0 ? "NONE" : to_string(countMod1)) << " ";
    cout << (countMod2 == 0 ? "NONE" : to_string((double)sumMod2 / countMod2)) << endl;

    return 0;
}

对于给定的输入样例1,输出结果为”9 3 6.5″,符合预期结果。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享