学到了一个switch新用法:
switch (d)
{
case 1:
{
.......
}
break;
}
这样可以控制变量只在某个case的范围内起作用,不会出现crossed initialization这种错误。
还学到了如何输出小数点后几位的写法
double型使用方法:
printf("%.3lf", aver); //输出小数点后3位、
float型就是
printf("%.3f", aver);
然后就是程序:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
int main()
{
//设置5个vector,分别装5类数字
vector<int> a[5];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
int d=temp%5;
a[d].push_back(temp);
}
for(int i=0;i<5;i++)
{
if(a[i].size()==0)
{
printf("N");
if(i!=4)
{
printf(" ");
}
continue;
}
switch(i)
{
case 0:
{
int sum=0;int evens=0;
for (vector<int>::iterator it=a[i].begin();
it!=a[i].end();it++)
{
int temp=*it;
if(temp%2==0)
{
sum+=temp;evens++;
}
}
if(evens==0)
{
printf("N ");
}else
{
printf("%d ",sum);
}
}
break;
case 1:
{
int sum1=0;bool k=true;
for (vector<int>::iterator it=a[i].begin();
it!=a[i].end();it++)
{
if(k)
{
sum1+=*it;
}else
{
sum1-=*it;
}
k=!k;
}
printf("%d ",sum1);
}
break;
case 2:
printf("%d ",a[i].size());
break;
case 3:
{
double sum3=0;
double aver;
for (vector<int>::iterator it=a[i].begin();
it!=a[i].end();it++)
{
sum3+=*it;
}
aver=sum3/(double)a[i].size();
printf("%.1lf ",aver);
}
break;
case 4:
{
int maxn=0;
for (vector<int>::iterator it=a[i].begin();
it!=a[i].end();it++)
{
if(maxn<*it)
{
maxn=*it;
}
}
printf("%d",maxn);
}
break;
}
}
}