2022年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

2022年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试_第1张图片

第1题:加一

输入一个整数x,输出这个整数加1后的值,即x+1的值。
时间限制:1000
内存限制:65536
输入
一个整数x(0 ≤ x ≤ 1000)。
输出
按题目要求输出一个整数。
样例输入
9
样例输出
10

以下是使用C语言编写的解决方案,用于计算输入整数x加1后的值:

#include 

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

    int result = x + 1;

    printf("%d\n", result);

    return 0;
}

在此解决方案中,我们首先使用scanf函数读取输入的整数x。然后,我们将x加1,并将结果存储在变量result中。

最后,我们使用printf函数输出计算得到的结果。

编译并运行上述代码,根据给定的输入示例,将会输出x加1后的值:

10

第2题:(a/b)*c的值

给定整数a、b、c,计算(a / b)*c的值,这里的除法为实数除法。
时间限制:1000
内存限制:65536
输入
一行,三个整数a、b、c,整数间以空格分隔。(1 ≤ a,b,c ≤ 1000)
输出
将计算结果保留6位小数输出。
样例输入
1 3 3
样例输出
1.000000

以下是使用C语言编写的解决方案,用于计算表达式(a / b) * c的值,并将结果保留6位小数输出:

#include 

int main() {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    double result = (double) a / b * c;

    printf("%.6f\n", result);

    return 0;
}

在此解决方案中,我们首先使用scanf函数读取输入的三个整数abc。然后,我们使用类型转换将a转换为double类型,并进行实数除法计算(a / b)。接下来,我们将得到的结果乘以c,并将最终结果存储在变量result中。

最后,我们使用printf函数以浮点数格式%.6f输出计算得到的结果,保留6位小数。

编译并运行上述代码,根据给定的输入示例,将会输出计算结果(a / b) * c的值:

1.000000

第3题:判断是否存在重复的数

给定3个数,判断是否存在2个数相等,如果存在输出"YES", 否者输出"NO"。
时间限制:5000
内存限制:65536
输入
1行,包含3个整数,以空格分隔。
输出
按照题目要求输出结果
样例输入
2 7 2
样例输出
YES

以下是使用C语言编写的解决方案,用于判断给定的3个数中是否存在两个相等的数:

#include 

int main() {
    int num1, num2, num3;
    scanf("%d %d %d", &num1, &num2, &num3);

    if (num1 == num2 || num1 == num3 || num2 == num3) {
        printf("YES\n");
    } else {
        printf("NO\n");
    }

    return 0;
}

在此解决方案中,我们首先使用scanf函数读取输入的三个整数num1num2num3。然后,我们使用条件语句if来检查是否存在两个数相等的情况。如果num1等于num2num1等于num3num2等于num3,则输出"YES";否则,输出"NO"。

编译并运行上述代码,根据给定的输入示例,将会输出判断结果:

YES

第4题:整数的立方和

给定一个正整数k(1
时间限制:1000
内存限制:65536
输入
输入只有一行,该行包含一个正整数k。
输出
输出只有一行,该行包含1到k的立方和。
样例输入
5
样例输出
225

以下是使用C语言编写的解决方案,用于计算1到k的立方和:

#include 

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

    int sum = 0;
    for (int i = 1; i <= k; i++) {
        sum += i * i * i;
    }

    printf("%d\n", sum);

    return 0;
}

在此解决方案中,我们首先使用scanf函数读取输入的正整数k。然后,我们使用一个循环从1到k遍历每个整数,并将当前整数的立方值累加到变量sum中。

最后,我们使用printf函数输出计算得到的立方和。

编译并运行上述代码,根据给定的输入示例,将会输出1到k的立方和:

225

第5题:自整除数

对一个整数n,如果其各个位数的数字相加得到的数m能整除n,则称n为自整除数.例如21,21%(2+1)==0,所以21是自整除数.现求出从10到n(n < 100)之间的所有自整除数.
时间限制:1000
内存限制:65536
输入
有一行,整数n,(10 <= n < 100)
输出
有多行.按从小到大的顺序输出所有大于等于10,小于等于n的自整除数,每行一个自整除数.
样例输入
47
样例输出
10
12
18
20
21
24
27
30
36
40
42
45

以下是使用C语言编写的解决方案,用于找出从10到给定数字n之间的所有自整除数:

#include 

int isSelfDividing(int num) {
    int temp = num;
    while (temp > 0) {
        int digit = temp % 10;
        if (digit == 0 || num % digit != 0) {
            return 0;
        }
        temp /= 10;
    }
    return 1;
}

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

    for (int i = 10; i <= n; i++) {
        if (isSelfDividing(i)) {
            printf("%d\n", i);
        }
    }

    return 0;
}

在此解决方案中,我们首先定义了一个名为isSelfDividing的函数,用于判断一个整数是否为自整除数。在该函数中,我们使用一个循环从右向左逐个提取数字,并检查是否能整除原始数。如果某个位上的数字为0或者无法整除原始数,则返回0;如果所有位上的数字都能整除原始数,则返回1。

在主函数中,我们首先使用scanf函数读取输入的整数n。然后,我们使用一个循环从10到n遍历每个整数,并调用isSelfDividing函数判断是否为自整除数。如果是,则使用printf函数输出该自整除数。

编译并运行上述代码,根据给定的输入示例,将会输出从10到n之间的所有自整除数:

10
12
18
20
21
24
27
30
36
40
42
45

你可能感兴趣的:(C/C++等级考试历届真题解析,c语言,c++,算法,电子学会,等级考试)