PTA -1012 数字分类

    xiaoxiao2021-04-18  221

                                      1012 数字分类 (20 分)

    给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

    A​1​​ = 能被 5 整除的数字中所有偶数的和;A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯;A​3​​ = 被 5 除后余 2 的数字的个数;A​4​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;A​5​​ = 被 5 除后余 4 的数字中最大数字。

    输入格式:

    每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。

    输出格式:

    对给定的 N 个正整数,按题目要求计算 A​1​​~A​5​​ 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

    若其中某一类数字不存在,则在相应位置输出 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

    解题思路:

         划重点!!题多读几遍其意自现!!!

          先给出共有N个数,再分别给出N个数字,这里可以用循环N个数来读取;

    A​1​​ = 能被 5 整除的数字中所有偶数的和;//可以a%5==0 && a%2==0或者a==0;A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯;//先定义一个i=1,再 i%2==0来实现对所得到的数字中筛选出偶数来进行操作,最后再 i++,来实现筛选序列中奇数偶数的变化;A​3​​ = 被 5 除后余 2 的数字的个数;A​4​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;//注意求平均数的时候(double)sum/count;强制类型转换来实现 int / int没有小数位的情况;A​5​​ = 被 5 除后余 4 的数字中最大数字。//令a5=0或者一个更小的数字,if(a>a5)则a5=a;来实现取最大值;

    程序源码:

    #include<iostream> #include<iomanip> using namespace std; int main() { int n,a; int a1_sum=0,a2=1,a2_sum=0,a5=0,a4_sum=0,a4_count=0; double a4=0.0; int a1_c=0,a2_c=0,a3_c=0,a4_c=0; cin>>n; while(n--) { cin>>a; if(a%5==0 && a%2==0)//A1 能被5整除的数字中所有偶数的和 { a1_sum=a1_sum+a; a1_c++; } else if(a%5==1) //A2 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4... { if(a2%2==0) //注意点① 偶数位取反值 { a2_sum=a2_sum-a; } else { a2_sum = a2_sum + a; } a2++; a2_c++; } else if(a%5==2) //A3 被5除后余2的数字的个数 { a3_c++; } else if(a%5==3) //A4 被5除后余3的数字的平均数,精确到小数点后1位 { a4_sum=a4_sum+a; a4_count++; a4=(double)a4_sum/a4_count; a4_c++; } else if(a%5==4) //A5 被5除后余4的数字中最大数字 { if(a>a5) { a5=a; } } } //输出格式:对给定的N个正整数,按题目要求计算A1-A5并在一行中顺序输出,数字间以空格分隔,但行末不得有多余空格; //若其中某一类数字不存在,则在相应位置输出N if(a1_c==0) { cout<<"N "; } else //用else不用else if { cout<<a1_sum<<" "; } if(a2_c==0) { cout<<"N "; } else { cout<<a2_sum<<" "; } if(a3_c==0) { cout<<"N "; } else { cout<<a3_c<<" "; } if(a4_c==0) { cout<<"N "; } else { cout<<fixed<<setprecision(1)<<a4<<" "; } if(a5 ==0) { cout<<"N"; } else { cout<<a5; } return 0; }

    反思总结:

    常规题目注意细节! 最后一位输出后面不应该有空格!

    cout<<fixed<<setprecision(1)<<a4 ;来实现对小数点后 1 位精度的输出

    或者out<<setiosflags(ios::fixed)<<setprecision(1)<<a4;   并且要加上头文件 #include<iomanip>

     


    最新回复(0)