2024年河南工业大学2024新生周赛(2)

A ReLU 函数

分段函数,用 if 判断 x 与 0 的大小关系。

  • 如果 x ≤ 0,f(x) = 0。
  • 如果 x > 0,f(x) = x。
#include <stdio.h>

int main(void) {
    int x;
    scanf("%d", &x);
    if (x <= 0) {
        printf("0");
    } else {
        printf("%d", x);
    }
    return 0;
}

B 求序列和

n 最大可以取 16,用 int 可能会溢出,因此用 long long。


这题不能用 double,因为 double 的尾数位只有 52 个二进制位,最多只能精确表示 15 或 16 个十进制有效数字。

深入了解可以搜索 IEEE754 标准相关解读。


#include <stdio.h>

int main(void) {
    int a, n;
    long long sum = 0;
    long long term = 0;

    scanf("%d %d", &a, &n);

    for (int i = 0; i < n; i++) {
        term = term * 10 + a; // 构造每一项
        sum += term;          // 累加到总和
    }

    printf("%lld", sum);

    return 0;
}

C 连续五天早八

判断是否有 5 个连续的 1 即可。


#include <stdio.h>

int main(void) {
    int n;
    scanf("%d", &n);
    
    int count = 0;
    for (int i = 0; i < n; ++i) {
        int haveClass;
        scanf("%d", &haveClass);
      
        if (haveClass) {
            ++count;
        } else {
            count = 0;
        }
      
        if (count == 5) {
            printf("Yes");
            return 0;
        }
    }
    printf("No");
    return 0;
}

D 找坐标

嵌套 for 循环,遍历每一行和每一列。如果找到 k,立刻输出然后结束程序。


#include <stdio.h>

int main(void) {
    int n, k;
    scanf("%d %d", &n, &k);
    
    /* r 代表行,c 代表列 */
    for (int r = 1; r <= n; ++r) {
        for (int c = 1; c <= n; ++c) {
          int num;
          scanf("%d", &num);
          
          if (num == k) {
              printf("%d %d", r, c);
              return 0;
          }
        }
    }
    return 0;
}

E 跑

用秒表示成绩,方便比较。例如 3'45'' 等于 225 秒。


#include <stdio.h>

int main(void) {
    int minute, second;
    int failCount = 0;
    scanf("%d", &minute);

    while (minute != -1) {
        scanf("%d", &second);

        int totalSeconds = minute * 60 + second;

        if (totalSeconds <= 207) {
            printf("Outstanding\n");
        } else if (totalSeconds <= 222) {
            printf("Good\n");
        } else if (totalSeconds <= 272) {
            printf("Pass\n");
        } else {
            printf("Fail\n");
            ++failCount;
        }

        scanf("%d", &minute);
    }
    printf("%d", failCount);
    return 0;
}

F 踱步

按照题目要求模拟过程即可。


#include <stdio.h>

int main(void) {
    int n;
    scanf("%d", &n);

    int lengthSum = 0;
    int x = 0, y = 0;

    for (int i = 0; i < n; ++i) {
        int direction, length;
        scanf("%d %d", &direction, &length);
        lengthSum += length;

        if (direction == 1) {
            x += length;
        } else if (direction == 2) {
            x -= length;
        } else if (direction == 3) {
            y -= length;
        } else {
            y += length;
        }
    }

    printf("%d %d\n", x, y);
    printf("%d\n", lengthSum);

    return 0;
}

G 进位

输入的数字 num 太大,以至于 int 和 long long int 都存不下,因此需要对 num 逐位进行处理。

前面的位加到 9,最后一位加到 10 进一位即可。

注意防止输出最高位是 0 的答案。可以用下面的自测数据检查一下代码。


#include <stdio.h>

int main(void) {
    int n;
    scanf("%d", &n);

    /* 记录是否输出过非 0 数字 */
    int nonzero = 0;

    for (int i = n; i >= 1; --i) {
        int numi;
        scanf("%d", &numi);

        int xi;
        if (i == 1) {
            /* 如果是最后一位,num 和 x 的对应位上的数字之和为 10 */
            xi = 10 - numi;
        } else {
            /* 如果不是最后一位,num 和 x 的对应位上的数字之和为 9 */
            xi = 9 - numi;
        }

        /* 防止输出带有前导 0 的数字,例如 009 */
        if (i != 1 && xi == 0 && !nonzero) {
            continue;
        }
        nonzero = 1;

        printf("%d", xi);
    }
    return 0;
}

自测输入 1


2
9 1

自测输出 1


9

自测输入 2


3
2 9 1

自测输出 2


709

H 周长之和

很容易发现一个规律:全部矩形重叠在一起组成的大图形周长最小,答案只分别由最宽和最高的两个矩形决定。


#include <stdio.h>

int main(void) {
    int n;
    scanf("%d", &n);
    
    int maxWidth = 0, maxHeight = 0;
    for (int j = 0; j < n; ++j) {
        int width, height;
        scanf("%d %d", &width, &height);
        
        if (maxWidth < width) {
            maxWidth = width;
        }
        if (maxHeight < height) {
            maxHeight = height;
        }
    }

    printf("%d\n", (maxWidth + maxHeight) * 2);
    return 0;
}
posted @ 2024-11-05 22:04  河南工业大学算法协会  阅读(322)  评论(0编辑  收藏  举报