11.6C语言学习记录(2)

给定 N 个正整数,要求你从中得到下列三种计算结果:
A1 = 能被 3 整除的最大整数
A2 = 存在整数 K 使之可以表示为 3K + 1 的整数的个数
A3 = 存在整数 K 使之可以表示为 3K + 2 的所有整数的平均值(精确到小数点后 1 位)
输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。
输入样例 1:
8
5 8 7 6 9 1 3 10
输出样例 1:
9 3 6.5

我的想法:按照格式输入,最后输出
答案:输出时先判断,再一个一个输出

第一次
 //每次都是无法输出光标一直闪烁

#include<stdio.h>
int main() {
    int a1 = 0, a2 = 0, a3 = 0, n = 0, num = 0, i = 0;
    int flag1 = 0, flag2 = 0, flag3 = 0;
    int max = 0,sum=0,count=0;
    double average = 0;
    scanf("%d", &n);
    for (i = 1;i <= n;i++) {
        scanf("%d ", &num);
        while (num > 0 && num <= 100) {
            sum += num;
            //判断a1
            if (num % 3 == 1) {
                a2++;
            }
            if (num % 3 == 2) {
                count++;
                a3 = 1.0 * sum / count;
            }
        }
    }
    输出太繁琐,可以单个判断,单个输出
    if (flag1 == 0) {
        if (flag2 == 0) {
            if (flag3 == 0) {
                printf("NONE NONE NONE");
            }
            else {
                printf("NONE NONE %d",a3);
            }
        }
        else {
            if (flag3 == 0) {
                printf("NONE %d NONE",a2);
            }
            else {
                printf("NONE %d %d", a2,a3);
            }
        }
    }
    else {
        if (flag2 == 0) {
            if (flag3 == 0) {
                printf("%d NONE NONE",a1);
            }
            else {
                printf("%d NONE %d",a1, a3);
            }
        }
        else {
            if (flag3 == 0) {
                printf("%d %d NONE",a1, a2);
            }
            else {
                printf("%d %d %d",a1, a2, a3);
            }
        }
    }
    return 0;
}

第二次
//怒改,但是有问题

#include<stdio.h>
int main() {
       int a1 = 0, a2 = 0, a3 = 0, n = 0,  i = 0;
       int max = 0, sum = 0, count = 0;
       char num,ch;
       scanf("%d", &n);
        //除去输入n之后的\n
        ch = getchar();
        num = getchar();
        while (num!='\n') {
            //判断a1---遍历输入的每个数,找到最大值并输出(写过但忘记怎么写的了
            max = num;
            for (i = 1;i <= n;i++) {
                num = getchar();
                if (num > max) {
                    max = num;
                }
            }
            printf("%d ", a1);
            //判断a2
            if (num % 3 == 1) {
                a2++;
            }
            //判断a3
            if (num % 3 == 2) {
                sum += num;
                count++;

//这里有问题,a2应该改成double类型
                a3 = 1.0 * sum / count;
            }
        }
    //单个判断,单个输出
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {
        printf("%d", a3);
    }
    else {
        printf("NONE");
    }
    return 0;
}

第三次
再次怒改,还是有问题

#include<stdio.h>
int main() {
       int a1 = 0, a2 = 0,  n = 0,  i = 0;
       int max = 0, sum = 0, count = 0;
       double a3 = 0;
       char num,ch1,ch2;
       scanf("%d", &n);
        //除去输入n之后的\n
        ch1 = getchar();
        num = getchar();
        while (num!='\n') {
            //判断a1---遍历输入的每个数,找到最大值并输出(写过但忘记怎么写的了
 //找a1有问题,a1应该是用for循环,只要一直输入,一直遍历就可以了,不需要在for里面套for
 因为输入的过程已经是遍历了,直接比较就可以

            max = num;
            for (i = 1;i <= n;i++) {
                num = getchar();
                if (num > max) {
                    max = num;
                }
            }
            printf("%d ", a1);
            //判断a2
            if (num % 3 == 1) {
                a2++;
            }
            //判断a3
            if (num % 3 == 2) {
                sum += num;
                count++;
                a3 = 1.0 * sum / count;
            }
        }
        ch2 = getchar();
    //单个判断,单个输出
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {
        printf("%d", a3);
    }
    else {
        printf("NONE");
    }
    return 0;
}


网上的学习一下
#include<stdio.h>
int main()
{
    int n, a2 = 0, a3 = 0, i, x, max = 0, sum = 0;
    scanf("%d", &n);
    for (i = 0;i < n;i++) {
        scanf("%d", &x);
        if (x % 3 == 0 && x > max)    //得到A1数
            max = x;
        if ((x - 1) % 3 == 0)        //成立的个数==A2
            a2++;
        if ((x - 2) % 3 == 0)        //成立的整数和/成立的个数==A3
        {
            a3++;    sum += x;
        }
    }
    if (max == 0)    printf("NONE ");    //按照题目说的a1,a2,a3中某个值不在就输出HONE
    else        printf("%d ", max);
    if (a2 == 0)    printf("NONE ");
    else        printf("%d ", a2);
    if (sum == 0)    printf("NONE");
    else        printf("%.1f", sum * 1.0 / a3);
    return 0;
}

第四次
再次怒改,还是不对(泪

#include<stdio.h>
int main() {
       int a1 = 0, a2 = 0,  n = 0,  i = 0;
       int  sum = 0, count = 0;
       double a3 = 0;
       char num,ch;
       scanf("%d", &n);
        //除去输入n之后的\n
        ch = getchar();
        num = getchar();
        while (num!='\n') {
            //判断a1---遍历输入的每个数,找到最大值并输出
            num = getchar();
            a1 = num;
            if (num % 3 == 0 && num > a1) {
                a1 = num;
            }
            printf("%d ", a1);
            //判断a2
            if (num % 3 == 1) {
                a2++;
            }
           // 判断a3
            if (num % 3 == 2) {
                sum += num;
                count++;
                a3 = 1.0 * sum / count;
            }
        }
    //单个判断,单个输出
        if (a1 != 0) {
            printf("%d", a1);
        }
        else {
            printf("NONE");
        }
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {

//这里输出类型有错误
        printf("%d", a3);
    }
    else {
        printf("NONE");
    }
    return 0;
}

第五次
堂堂正确(喜

#include<stdio.h>
int main() {
    int a1 = 0, a2 = 0, n = 0, i = 0,num=0;
    int  sum = 0, count = 0;
    double a3 = 0;
    scanf("%d", &n);
    for (i = 1;i <= n;i++) {
        scanf("%d", &num);
        //因为a1已经初始化过了,所以不用再假设a1=num
        if (num % 3 == 0 && num > a1) {
            a1 = num;
        }
        if (num % 3 == 1) {
            a2++;
        }
        if (num % 3 == 2) {
            count++;
            sum += num;
            a3 = 1.0 * sum / count;
        }
    }
    //单个判断,单个输出
    if (a1 != 0) {
        printf("%d ", a1);
    }
    else {
        printf("NONE ");
    }
    if (a2 != 0) {
        printf("%d ", a2);
    }
    else {
        printf("NONE ");
    }
    if (a3 != 0) {
        printf("%.1lf", a3);
    }
    else {
        printf("NONE");
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值