数字分类 (20)
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB
题目描述
给定一系列正整数,请按要求对数字进行分类,并输出以下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”。
输入例子:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出例子:
30 11 2 9.7 9 思路:设定出几种情况需要用到了变量分情况讨论即可。 需要的问题:1、强制转换类型 v1版编码时 余数为3时,平均数总不对。后来发现是除数被除数都是int型,结果不是浮点型而是自动识别为int型。所以需要强制转换下,或者设置sum变量时直接设为浮点型,此时除数和被除数有一个为浮点型,计算时即可按照浮点型运算。2、breakswitch-case语句,break表示跳至switch有括号处。若没有break则继续执行下一个case语句。 v1版↓
#include<stdio.h> int main(){ int num,a,a1=0,a2=0,a3=0,a5=0,n,i,b=1,sum=0,co3=0; float a4=0; bool s0=false,s1=false,s2=false,s3=false,s4=false; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&num); a=num%5; switch(a) { case 0:{ if(num%2==0){ s0=true; a1=a1+num; break; } break; } case 1:{ s1=true; a2=a2+b*num; b=-b; break; } case 2:{ s2=true; a3++; break; } case 3:{ s3=true; sum=sum+num; co3++; a4=(float)sum/co3; break; } case 4:if(num>a5){ s4=true; a5=num; break; } } } if(s0) printf("%d",a1); else printf("N"); if(s1) printf(" %d",a2); else printf(" N"); if(s2) printf(" %d",a3); else printf(" N"); if(s3) printf(" %.1f",a4); else printf(" N"); if(s4) printf(" %d",a5); else printf(" N"); return 0; }
v1代码思路清晰却有些拖沓,可优化,晚些来填坑。
时间: 2024-10-17 18:52:10