华为2016校园招聘上机笔试题,C语言描述

华为2016校园招聘上机笔试题
题库检索关键词:华为2016校园招聘上机笔试题
来源:牛客网
第一题
在这里插入图片描述

#include <stdio.h>
int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to
        int n = a, m = b;
        int grade[n];
        for (int i = 0; i < n; i++) {
            scanf("%d", &grade[i]);
        }
        char operate;
        int A, B;
        for (int i = 0; i < m; i++) {
            char c;
            c = getchar();
            scanf("%c", &operate);
            scanf("%d%d", &A, &B);
            if (operate == 'U') {
                grade[A - 1] = B;
            } else {
                if (A > B) {
                    int temp = A;
                    A = B;
                    B = temp;
                }
                int max = grade[A - 1];
                for (int i = A - 1; i < B; i++) {
                    if (grade[i] > max)max = grade[i];
                }
                printf("%d\n", max);
            }

        }
    }
    return 0;
}

参考C++代码
思考:

  • 第一次编写的时候不习惯ACM格式,输入scanf(%c)的时候在考虑它会不会过滤\n,答案很显然->不会;
  • 我理所当然地把getchar放到了最后,但是上面有n个数了,有数据上面的getchar给读取到了scanf;
  • 跑出正确个数的答案后发现答案错误,debug发现比较max这个写错了>max写成了>grade[0]经常手飄这个;
  • 用它的数据跑跑出错误之后,从源码复制输入输出,比对,发现一组数据经过思考差点取余,1到4之间和4到1之间是一样的。

总结:

  • C++具有比C很大的优势,但是C更加贴合思考的本质
  • C++在输入输出部分不用考虑那么多,在取最大值的时候失误也是极少的
  • 代码量少,编写快
    关于scanf(%c)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值