题目描述
给定一系列正整数,请按要求对数字进行分类,并输出以下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
代码如下:
<span style="font-family:KaiTi_GB2312;font-size:24px;">#include<iostream>
using namespace std;
int main()
{
long long int A1=0,A2=0,A3=0,A5=0;
double A4=0.0;
int flag = 1;
int count1=0,count2=0,count3=0,count4=0,count5=0;//记录是否存在A1--A5
int i;
long long int array[1000];
unsigned int N;
cin>>N;
for(i=0;i<N;++i)
cin>>array[i];
for(i=0;i<N;++i)
{
switch(array[i]%5)
{
case 0:
if(array[i]%2 == 0)//1其他方式??
{
count1++;
A1 += array[i];
}
break;
case 1:
count2++;
A2 += flag*array[i];
flag = -flag;
break;
case 2:
count3++;
A3 += 1;
break;
case 3:
count4++;
A4 += array[i];
break;
case 4:
count5++;
if(A5 < array[i])
A5 = array[i];
break;
}
}
if(count1 == 0)
cout<<"N ";
else
cout<<A1<<" ";
if(count2 == 0)
cout<<"N ";
else
cout<<A2<<" ";
if(count3 == 0)
cout<<"N ";
else
cout<<A3<<" ";
if(count4 == 0)
cout<<"N ";
else
printf("%.1f ",A4/count4);//2浮点数按格式输出重点!!!
if(count5 == 0)
cout<<"N";
else
cout<<A5;
cout<<endl;
return 0;
}</span>
关于该编程题,学习一下知识点:
1:判断n是否能被2整除的两种方式
1:if(n%2 == 0)
2:if(n&1 == 0)二进制....8421,除了最低位其余位都是2的倍数,若n是偶数则最低位一定为0,所以和1相&一定为0
2:判断n是否既能被5整除,又能被2整除
1:if(n%5 == 0 && n%2 == 0)
2: if(n%10 == 0)条件等价于能被10整除
3:输出的数值(n)精确到小数点后一位
1:printf("%.1f",n);c语言方式
2:cout.setf(ios::fixed);c++方式
cout.precision(1);
cout<<n<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(1)<<n<<endl;
拓展:关于浮点数格式化输出用下面的程序说明:
#include<iostream>
using namespace std;
int main()
{
float f = 1.0/3.0;
float f1 = 0.000000002;
float f2 = -7.6;
cout<<f<<" "<<f1<<" "<<f2<<endl;//正常输出
cout.setf(ios::showpos); //强制正数前加+号
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.unsetf(ios::showpos); //取消正数前加+号
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.setf(ios::showpoint); //强制显示无效小数点后的0
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.unsetf(ios::showpoint); //取消显示无效小数点后的0
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.setf(ios::scientific); //科学计数法
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.unsetf(ios::scientific); //取消科学计数法
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.setf(ios::fixed); //按点显示输出,不按科学计数
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.unsetf(ios::fixed); //取消按点输出
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.precision(3); //单独使用表示浮点数有效位的个数
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout.precision(6); //c++默认的流输出数值有效位是6
cout<<f<<" "<<f1<<" "<<f2<<endl;
return 0;
}
#include<iostream>
#include<iomanip>//io流控制头文件
using namespace std;
int main()
{
float f = 1.0/3.0;
float f1 = 0.000000002;
float f2 = -7.6;
cout<<f<<" "<<f1<<" "<<f2<<endl; //正常输出
cout<<setiosflags(ios::showpos); //强制正数前加+号
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<resetiosflags(ios::showpos); //取消正数前加+号
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<setiosflags(ios::showpoint); //强制显示无效小数点后的0
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<resetiosflags(ios::showpoint);//取消显示无效小数点后的0
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<setiosflags(ios::scientific); //科学计数法
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<resetiosflags(ios::scientific);//取消科学计数法
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<setiosflags(ios::fixed); //按点显示输出,不按科学计数
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<resetiosflags(ios::fixed); //取消按点输出
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<setprecision(3); //单独使用表示浮点数有效位的个数
cout<<f<<" "<<f1<<" "<<f2<<endl;
cout<<setprecision(6); //c++默认的流输出数值有效位是6
cout<<f<<" "<<f1<<" "<<f2<<endl;
return 0;
}
以上两个程序等价,第二个注意要加上头文件:<iomanip>