题目:
分析:
该题相当于多种知识点的混杂,需要学会
1.运用取模符号%
2.判断一个数是否为偶数n%2==0
3.学会数字交错求和,运用一个变量来判断该数是第几个数。奇数则相加,偶数则相减
4.学会计数
5.学会求最大数,即打擂比武
代码一:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int sum1=0;//sum1用来求取模为0且为偶数的和
int sum2=0,i=0;//用i来判断该取模为1的数是第几个,奇数个还是偶数个,奇数加偶数减,sum2用来表示其和
int sum3=0;//计数器,sum3用来记录取模为2的数的个数
int sum4=0,j=0;//j用来记录取模为3的数的和,j用来记录个数
int max=0;//求最大值,即打擂比武,可赋值为0,因为输入的为正整数
int c;//用来存储变量
while(n--)//表示输入的个数
{
scanf("%d",&c);
if(c%5==0)//取模为0
{
if(c%2==0)//偶数的情况
{
sum1+=c;
}
}
else if(c%5==1)//取模为1
{
i++;//计数器
if(i%2!=0)//第奇数个
{
sum2+=c;
}
else//第偶数个
{
sum2-=c;
}
}
else if(c%5==2)//取模为2
{
sum3++;//计数器
}
else if(c%5==3)//取模为3
{
sum4+=c;
j++;
}
else if(c%5==4)//取模为4
{
if(max<c)//打擂比武
{
max=c;
}
}
}
if(sum1!=0)
{
printf("%d",sum1);
}
else
{
printf("N");
}
if(i!=0)
//表明该种类的数存在,不可以用sum2==0来作为判断条件,因为可能加减后的结果为0
{
printf(" %d",sum2);
}
else
{
printf(" N");
}
if(sum3!=0)
{
printf(" %d",sum3);
}
else
{
printf(" N");
}
if(sum4!=0)
{
printf(" %.1f",sum4*1.0/j);//保留位一个小数所以是%.1f
}
else
{
printf(" N");
}
if(max!=0)
{
printf(" %d\n",max);
}
else
{
printf(" N\n");
}
}
未通过的代码(还不知道为什么)
#include<stdio.h>
#include<string.h>
// 调用memset函数所需的头文件
int main(){
// char a[5];
// memset(a,'N',5*sizeof(char));
// 初始化为N
int b[5];
memset(b,0,5*sizeof(int));
// 初始化为0
int n;
scanf("%d",&n);
// 输入测试用例
int i,m,j=0,max=0;
// 通过j来判断将被 5 除后余 1 的数字是第奇数个还是第偶数个
for(i=0;i<n;i++){
scanf("%d",&m);
if(m%5==0&&m%2==0){
// 能被 5 整除的数字中所有偶数的和
b[0]+=m;
}
else if(m%5==1){
// 将被 5 除后余 1 的数字按给出顺序进行交错求和
j++;
if(j%2!=0){
// 第奇数个
b[1]+=m;
}
else{
// 第偶数个
b[1]-=m;
}
}
else if(m%5==2){
// 被 5 除后余 2 的数字的个数
b[2]++;
}
else if(m%5==3){
// 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位
b[3]+=m;
}
else{
// 被 5 除后余 4 的数字中最大数字
if(max<m){
b[4]=m;
max=m;
}
}
}
for(i=0;i<5;i++){
if(b[i]>0){
// 表明该数据存在
if(i==0){
printf("%d",b[i]);
}
else if(i==3){
printf(" %.1f",b[i]*1.0/j);
}
else{
printf(" %d",b[i]);
}
}
else{
// 表明该数据不存在
if(i==0){
printf("N");
}
else{
printf(" N");
}
}
}
printf("\n");
return 0;
}