解救最好的鸭鸭

本题主要考察利用循环对数进行拆解,利用取余和除10后的自动类型转换不断拆分要处理的数据,得到这个数字中3的个数。

#include <stdio.h>

int countDigit3(int number) {
    int count = 0;
    while (number > 0) {
        if (number % 10 == 3) {
            count++;
        }
        number /= 10;
    }
    return count;
}

int main() {
    int m, n;
    int totalCount = 0;

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

    for (int i = m; i <= n; i++) {
        totalCount += countDigit3(i);
    }

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

打工?社畜!

本题考察利用循环进行逻辑运算。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
        int n;
        int count = 0;
        scanf("%d", &n);
        int m = 1;
        int p = 1;
        for (int i = 1; i <= n; i++) {
                if (i < m || i == m) {
                        count += p;
                }
                else {
                        p += 1;
                        m = m + p;
                        count += p;
                }
        }
        printf("%d", count);
        return 0;
}

水题

本题考查利用switch结构进行输出,以及思维的转换,有的时候利用字符串读取和分解更加简单,效率更高。

#include<stdio.h>
int main() {
        char arr[20];
        int count = 0;
        for (int i = 0; i < 20; i++) {
                scanf("%c", &arr[i]);
                if (arr[i] == '\n') {
                        break;
                }
                count++;
        }
        for (int i = 0; i < count; i++) {
                switch (arr[i])
                {
                        case '0':printf("zero "); break;
                        case '1':printf("one "); break;
                        case '2':printf("two "); break;
                        case '3':printf("three "); break;
                        case '4':printf("four "); break;
                        case '5':printf("five "); break;
                        case '6':printf("six "); break;
                        case '7':printf("seven "); break;
                        case '8':printf("eight "); break;
                        case '9':printf("nine "); break;
                default:
                        break;
                }
        }
        return 0;

}

落花流水

本题主要考察对于循环和判断的使用,根据不同的条件来判断得分的情况(比如设置cnt为计数器),主要分为单一得分和多项得分两种(其中我们可以发现荷花明确出现时不会得分,所以只考虑前三个条件即可);选择地点后再去进行河蟹得分的判断,根据不同的最终结果输出相对应的输出形式。

#include <stdio.h>
#include <string.h>

int main (void) {
    int n;
    int max_score = 0, best_location = 0, h = 0, kc = 0;
    scanf("%d", &n);
    
    for (int i = 1; i <= n; i++) {
        char l, m, p;
        int w, r, s;
        int score = 0, cnt = 0;//定义分数与计数器
        scanf(" %c %d %c %c %d %d", &l, &w, &m, &p, &r, &s);//scanf前加个空格防止读取数据终止
        if (!(l >= 'a' && l <= 'm' || l >= 'A' && l <= 'M')) {//没有柳絮才能进入判断
            if (w == 1) {//有山峰河流
                score += 10;
                cnt += 2;
            } else if (w > 1 && w <= 9) {//有河流
                score += 8;
                cnt++;
            }
            if (m == 'x' || m == 'X') {//有紫罗兰花
                score += 15;
                cnt++;
            }
            if (cnt == 1) {//判断是否只有一个环境因素
                if (score == 8) {//只有河流
                    score = 6;
                } else {//只有紫罗兰花
                    score = 10;
                }
            }
            if (score >= 10 && score > max_score) {//判断该地点是否能野炊,是否分数最高且序列号最小
                max_score = score;//记录最高分
                best_location = i;//记录地点序号
                h = r;//河蟹
                kc = s;//烤肠
            }
        }
    }

    
    if (best_location == 0) {//若无适合野炊地点
        printf("What @ plty!\n");
    } else {//若有,根据河蟹与烤肠数量进行相对应的输出
        if (h > kc) {
            max_score -= (h - kc);
        }
        if (h <= kc) {
            max_score += (2 * h - kc);
        }
        if (max_score < 0) {
            max_score = (- max_score);
        }
        printf("%d %d\n", best_location, max_score);
        if (max_score < 10) {//若处理完河蟹与烤肠得分小于十分则还要换行输出
            printf("Man! what can l s4y?");
        }
    }
    return 0;
}

你也会加减法吗?

该题主要考察switch语句与for循环语句的结合,在运算符为"/"、"q"以及其他运算符时会产生其他结果。

#include <stdio.h>

int main() {
    int n, a, b;
    char c;
    scanf("%d", &n); // 读取算式个数

    for (int i = 0; i < n; i++) {
        scanf("%d %c %d", &a, &c, &b); // 读取每个算式的参数

        switch (c) {
            case '+':
                printf("%d\n", a + b);
                break;
            case '-':
                printf("%d\n", a - b);
                break;
            case '*':
                printf("%d\n", a * b);
                break;
            case '/':
                if (b == 0) {
                    printf("N0\n");
                } else {
                    printf("%d\n", a / b);
                }
                break;
            case 'q':
                printf("I ju5t want to take a break, n0t quit!\n");
                return 0; // 结束程序
            default:
                printf("This is an invalid operatiOn.\n");
                break;
        }
    }
    return 0;
}