C++ 数字分类
1012 数字分类 (20分)
输入格式:
每个输入包含 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
算法思想:
由于输出的数字只有5个,就不需要数组了,直接在接收数据时对其进行处理就可以。我又犯了没看题的老毛病,把开始的13看成一个数,得出的平均数就不同,看了好久才找到哪里错了。
其中要注意的一点是:余数=1时,一开始设定的初始值是0,但是交错相加有等于0 的可能,因此我设定了一个bool类型的值,如果没有余数=1 的数,flag的值就不会变。
还有一点是两个函数:
1.cout << fixed << setprecision(1) << average4 << " "; 输出的精确到小数点后几位 #include
2.sum2 += pow(-1.0,time2)*num; -1的n次幂 #include
完整代码如下:
1 #include2 #include 3 #include 4 5 using namespace std; 6 int main() 7 { 8 //输入个数 9 int counts,time = 0; 10 cin >> counts; 11 12 int num; 13 int sum1 = 0;//A1 14 15 int time2 = 1,sum2 = 0;//A2 16 bool flag2 = false;//判断是否有余数为1的数 17 18 int count3 = 0;//A3 19 20 double count4 = 0,sum4 = 0,average4 = 0;//A4 21 22 int max_num = 0;//A5 23 while(time < counts && cin >> num) 24 { 25 int remainder = num % 5; 26 switch(remainder) 27 { 28 case 0: 29 if(num%2 == 0)sum1+=num; 30 break; 31 case 1: 32 time2++; 33 sum2 += pow(-1.0,time2)*num; 34 flag2 = true;//若flag2的值改变则表示有余数为1的值 35 break; 36 case 2: 37 count3 ++; 38 break; 39 case 3: 40 sum4 += num; 41 count4++; 42 average4 = sum4/count4; 43 break; 44 case 4: 45 max_num = num > max_num ? num:max_num; 46 break; 47 } 48 time++; 49 } 50 51 if(sum1 == 0)cout << "N "; 52 else cout << sum1 << " "; 53 54 if(!flag2)cout << "N "; 55 else cout << sum2 << " "; 56 57 if(count3 == 0)cout << "N "; 58 else cout << count3 << " "; 59 60 if(average4 == 0)cout << "N "; 61 else cout << fixed << setprecision(1) << average4 << " "; 62 63 if(max_num == 0)cout << "N"; 64 else cout << max_num; 65 66 67 68 return 0; 69 }