A类:1012 数字分类 (20 分)

题目:

在这里插入图片描述

分析:

该题相当于多种知识点的混杂,需要学会
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;
}

猜你喜欢

转载自blog.csdn.net/qq_51517771/article/details/115936717
今日推荐