题目描述
从一堆数字中,选出符合题目要求的五类数字,如果其中某一类没有任何数字属于它,那么这一类对应的输出是"N"。
题目分析
我本人有个毛病,这种很简单的问题,很快就有了思路,但一般都是硬性求解的办法,所以代码就写得很长,会有一些冗余代码。所以我自己的一定不是最简洁的代码,但方法估计也不会有更优的了,毕竟这道题不涉及什么特殊的技巧,跟着一步一步走就好了。
因为只有固定的五类数据,所以我们可以提前定义五个r1-r5变量代表结果。还要提前定义五个标志变量flag,并初始化为0,某个类别i一旦发生ri的改变,则这个标志变量会变成1,最后我们分别对于标志变量是0的类别,我们输出"N"
我们还要声明两个变量,一个是order,一个是count。
我们发现对于类别2的数据,第一次出现的值前面是正好,第二次是负号,第三次是正号,第四次是负号…所以我们得出结论,第奇数个数据前是正号,第偶数个前是负号,所以order是用来指示第二类数据中的奇偶次序的。
而count是用来指示第四类数据中的数据个数,因为我们要求平均值,所以我们把count声明为double 类型的。
控制精度是小数点后一位的操作是:
cout<<setiosflags(ios::fixed)<<setprecision(1)<<r4 / count_4<<" ";
这是一个固定的控制输出语句,大家可以记下来。但是要先引入iomanip标准库。
代码
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
int n;
vector<int>number;
cin>>n;
int num;
for(int i = 0;i < n;i++)
{
cin>>num;
number.push_back(num);
}
int r1 = 0,r2 = 0,r3 = 0,r5 = 0;
int flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0,flag5 = 0;
double r4 = 0.0;
int count = 0;
double count_4 = 0.0;
for(int j = 0;j < number.size();j++)
{
if(number[j] % 5 == 0 && number[j] % 2 == 0)
{
r1 += number[j];
flag1 = 1;
}
else if(number[j] % 5 == 1)
{
if(count % 2 == 0)
{
r2 += number[j];
count+=1;
}
else
{
r2 -= number[j];
count+=1;
}
flag2 = 1;
}
else if(number[j] % 5 == 2)
{
r3 += 1;
flag3 = 1;
}
else if(number[j] % 5 == 3)
{
r4 += number[j];
count_4+=1;
flag4 = 1;
}
else if(number[j] % 5 == 4)
{
r5 = number[j] > r5 ? number[j] : r5;
flag5 = 1;
}
}
if(flag1)
cout<<r1<<" ";
else
cout<<"N ";
if(flag2)
cout<<r2<<" ";
else
cout<<"N ";
if(flag3)
cout<<r3<<" ";
else
cout<<"N ";
if(flag4)
{
cout<<setiosflags(ios::fixed)<<setprecision(1)<<r4 / count_4<<" ";
}
else
cout<<"N ";
if(flag5)
cout<<r5;
else
cout<<"N";
return 0;
}
总结
答题用时16min
Q12——finish√