22年+21年 计算机能力挑战赛初赛C语言程序题 题解

22年

第14题:答案:33

#include<stdio.h>
int  x=1;
int f(int  a)
{   static int  x=2;
    int  n=0;
   if(a%2)
         { static int  x=3;n+=x++;  }
   else  
         { static int  x=5;n+=x++;  }
    return  n+x++;
 } 
void  main()
{   int  sum=x,i;
    for(i=0;i<4;i++) 
         sum+=f(i); 
    printf("%d",sum);
}

分析:
好的,让我们逐步分析这段代码,并计算出最终的答案。

首先,全局变量 x 被初始化为 1。

接下来是函数 f 的定义。在函数内部,有一个静态局部变量 x,并且有一个局部变量 n 初始化为 0。根据传入的参数 a 的奇偶性,选择不同的分支执行。当 a 为奇数时,x 被初始化为 3;否则 x 被初始化为 5。然后 n 的值加上 x 的值(并且 x 自增)。最后返回 n 加上 x 的值(并且 x 自增)。

在主函数 main 中,定义了一个整型变量 sum 并初始化为 x 的值(即 1),以及一个整型变量 i。然后使用 for 循环对 i 进行 4 次迭代,在每次迭代中将 sum 增加调用函数 f 传入 i 的返回值。最后使用 printf 打印出 sum 的值。

现在我们来逐步计算。

  1. 初始时,sum = 1,i = 0。
  2. 当 i = 0 时,调用 f(0):
    • 进入 f 函数,x 被初始化为 5,返回值为 5 + 5 = 10
    • sum += 10,此时 sum = 11
  3. 当 i = 1 时,调用 f(1):
    • 进入 f 函数,x 被初始化为 3,返回值为 3 + 3 = 6
    • sum += 6,此时 sum = 17
  4. 当 i = 2 时,调用 f(2):
    • 进入 f 函数,x 被初始化为 5,返回值为 5 + 5 = 10
    • sum += 10,此时 sum = 27
  5. 当 i = 3 时,调用 f(3):
    • 进入 f 函数,x 被初始化为 3,返回值为 3 + 3 = 6
    • sum += 6,此时 sum = 33

因此,最终的输出结果为 33。

在这里插入图片描述

第15题 答案:15

#include <stdio.h>
int f(int x)
{ int n;
if(x==1) return 1;
n = x+f(x-1);
return (n);
}
void main()
{
printf(“%d”,f(5));
}
程序的输出结果是( )。

分析
这段程序的输出结果是 15。

让我们来逐步分析这段代码。首先,函数 f 接受一个整型参数 x。在函数内部,如果 x 的值为 1,那么直接返回 1。否则,定义一个局部变量 n,并将其初始化为 x 加上调用 f 函数传入 x-1 的返回值。最后返回 n 的值。

在主函数 main 中,调用 f 函数并传入参数 5,并使用 printf 打印出其返回值。

现在我们来逐步计算。

  1. 调用 f(5):
    • 进入 f 函数,x 不等于 1,计算 n = 5 + f(4)
    • 调用 f(4):
      • 进入 f 函数,计算 n = 4 + f(3)
      • 调用 f(3):
        • 进入 f 函数,计算 n = 3 + f(2)
        • 调用 f(2):
          • 进入 f 函数,计算 n = 2 + f(1)
          • 调用 f(1):
            • 直接返回 1
          • f(2) 返回 2 + 1 = 3
        • f(3) 返回 3 + 3 = 6
      • f(4) 返回 4 + 6 = 10
    • f(5) 返回 5 + 10 = 15

因此,最终的输出结果是 15。

在这里插入图片描述

第15题

#include <stdio.h>
int f(int x)
{ int n;
if(x==1) return 1;
n = x+f(x-1);
return (n);
}
void main()
{
printf(“%d”,f(5));
}
程序的输出结果是( )。

21年程序设计大题:

输入两个整数x,y输出x,y中各位数重新组合可能形成的最小的数

输入:输入:只有一组,每组两个长度不超12位的正整数
输出:用x,y中的所有的数字位重新组合能形成最小的数(如果首位是0也要输出)

样例输入:
100 423

样例输出
001234

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

// 比较函数,用于qsort排序
int compare(const void *a, const void *b) {
    return (*(char*)a - *(char*)b);
}

int main() {
    int x, y;
    char str[25];

    // 读取输入
    scanf("%d %d", &x, &y);

    // 将两个整数转换为字符串
    sprintf(str, "%d%d", x, y);

    // 对字符串进行排序
    qsort(str, strlen(str), sizeof(char), compare);

    // 输出重新组合后的最小数
    printf("%s\n", str);

    return 0;
}

分析

  1. 首先,我们需要读取两个整数 x 和 y。

  2. 将两个整数转换成字符串。我们可以使用sprintf函数将两个整数格式化为字符串,并将它们连接在一起。

  3. 接下来,我们需要对字符串进行排序,以便重新组合数字。我们使用C标准库中的qsort函数来实现排序。qsort函数需要传入待排序的数组(即字符串),数组的大小(字符串的长度),每个元素的大小(在这里是一个字符的大小),以及一个比较函数。比较函数用于指定排序的顺序。在这个例子中,我们使用了一个自定义的比较函数compare来按照字符的大小进行排序。

  4. 排序完成后,我们将排序后的字符串输出即可得到重新组合后的最小数。

整体上,该算法的步骤包括了读取输入、字符串转换、排序和输出结果。通过将整数转换为字符串,并对字符串进行排序,我们可以重新组合数字以得到最小的数。

写个一个程序统计从1到N这N个数中,以下三个条件都满足的数字x个数

  1. x是一个素数(如2,3,5,7…)
  2. x是一个对称的数 (如1,11,121,都是对称的数)
  3. x的所有数字和恰好是7的倍数(如7,16,25,34,43,61,70,115,)

输入:一个整数N(1<=N<=10000)
输出: 满足这三个条件的个数

样例输入:
20
样例输出
1

样例解释:
从1~20中素数有2,3,5,7,11,13,17,19,再结合条件2可以看到对称的数只有
2 3 5 7 11,又因为条件3,所以只有7满足要求,所以输出个数为1

#include <stdio.h>
#include <stdbool.h>

// 判断素数
bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

// 判断是否为对称数
bool isSymmetric(int n) {
    int reverse = 0, original = n;
    while (n > 0) {
        reverse = reverse * 10 + n % 10;
        n /= 10;
    }
    return original == reverse;
}

// 统计满足条件的数字个数
int countNumbers(int N) {
    int count = 0;
    for (int i = 1; i <= N; i++) {
        if (isPrime(i) && isSymmetric(i)) {
            int sumOfDigits = 0, num = i;
            while (num > 0) {
                sumOfDigits += num % 10;
                num /= 10;
            }
            if (sumOfDigits % 7 == 0) {
                count++;
            }
        }
    }
    return count;
}

int main() {
    int N;
    scanf("%d", &N);
    int result = countNumbers(N);
    printf("%d\n", result);
    return 0;
}
  1. 从标准输入中读取一个整数N,表示我们要统计满足条件的数字个数的范围是从1到N。
  2. 程序进入main函数,声明了变量N和count,其中N用于存储输入的整数,count用于存储满足条件的数字个数。
  3. 程序使用scanf函数读取输入的整数N。
  4. 程序进入for循环,从1遍历到N。在每次迭代中:
    • 调用isPrime函数判断当前数字是否为素数。
    • 调用isPalindrome函数判断当前数字是否为对称数。
    • 调用sumOfDigits函数计算当前数字的各位数字之和,并判断是否为7的倍数。
    • 如果当前数字同时满足以上三个条件,则将count加1。
  5. for循环结束后,程序输出count,即满足条件的数字个数。
  6. 程序运行结束。

这个程序的核心思想是通过遍历从1到N的所有数字,依次判断每个数字是否满足条件,如果满足则累加到count中。最后输出count的值,即为满足条件的数字个数。

写个一个程序统计从1到N这N个数中,以下三个条件至少满足两个条件的数字x个数

  1. x是一个素数(如2,3,5,7…)
  2. x是一个对称的数 (如1,11,121,都是对称的数)
  3. x的所有数字和恰好是7的倍数(如7,16,25,34,43,61,70,115,)

输入:一个整数N(1<=N<=10000)
输出: 至少满足这三个条件之两个的个数

样例输入:
20
样例输出
9

样例解释:
条件1:从1~10 中素数为2,3,5,7,
条件2:对称的数为1,2,3,4,5,6,7,8,9
条件3:数字和为7的倍数:7

当输入一个整数 N 之后,程序会通过循环遍历从 1 到 N 的所有数字,对每个数字依次进行以下步骤:

  1. 判断是否为素数(isPrime 函数)

    • 如果当前数字小于等于 1,则不是素数,返回 false。
    • 否则,从 2 开始,逐个尝试将当前数字除以从 2 到 sqrt(n)(取整数部分)的数,如果能整除则返回 false,表示不是素数;如果都不能整除,则返回 true,表示是素数。
  2. 判断是否为对称数(isPalindrome 函数)

    • 将当前数字保存到临时变量 temp 中。
    • 使用 while 循环,对 temp 进行取余和整除操作,将数字反转存储到 reversed 变量中。
    • 比较反转后的数字与原数字是否相等,相等则返回 true,表示是对称数;否则返回 false,表示不是对称数。
  3. 计算各位数字之和(sumOfDigits 函数)

    • 使用 while 循环,对当前数字进行取余和整除操作,计算各位数字之和并保存到 sum 变量中。
  4. 在主函数中,将以上三个条件分别判断,并用 conditionCount 计数满足的条件数量。如果满足条件的数量大于等于 2,则 count 计数加一。

  5. 最后输出 count 的值,即满足条件的数字个数。

这段代码通过遍历从 1 到 N 的所有数字,分别判断其是否为素数、对称数以及各位数字之和是否能被 7 整除,并统计同时满足至少两个条件的数字个数。

#include <stdio.h>
#include <stdbool.h>

// 判断一个数是否是素数
bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

// 判断一个数是否是对称的数
bool isPalindrome(int n) {
    int temp = n;
    int reversed = 0;
    
    while (temp != 0) {
        reversed = reversed * 10 + temp % 10;
        temp /= 10;
    }
    
    return reversed == n;
}

// 计算一个数的各位数字之和
int sumOfDigits(int n) {
    int sum = 0;
    
    while (n != 0) {
        sum += n % 10;
        n /= 10;
    }
    
    return sum;
}

int main() {
    int N;
    int count = 0;
    
    // 读取输入
    scanf("%d", &N);
    
    // 遍历从1到N的所有数字
    for (int i = 1; i <= N; i++) {
        int conditionCount = 0;
        
        if (isPrime(i)) {
            conditionCount++;
        }
        
        if (isPalindrome(i)) {
            conditionCount++;
        }
        
        if (sumOfDigits(i) % 7 == 0) {
            conditionCount++;
        }
        
        if (conditionCount >= 2) {
            count++;
        }
    }
    
    // 输出满足条件的个数
    printf("%d\n", count);
    
    return 0;
}

入N个人的语(chinese)数(math)外(english)考试成绩,请输出总分最低的学生和单科最低的学生,相同的成绩也要输出(按照原来的顺序)

输入: 一个整数n表示n个人的考试成绩(1<n<=1000),随后有n行,每行依次是这个学生的姓名,语文成绩,数学成绩,外语成绩(都是整数)
输出: 首先输出语文最低的人(可以并列),然后是数学最低的, 外语最低的,最后输出总分最低的人(可以并列)具体格式参考输出样例

输入样例
5
tom 100 99 98
alice 100 100 100
peter 89 89 100
jerry 60 100 100
cat 60 50 50

输出样例
lower chinese:
jerry(60)
cat(60)

lower math:
cat(50)

lower english:
cat(50)

lower score:
cat(160)

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

struct Student {
    char name[100];
    int chinese;
    int math;
    int english;
    int total;
};

int main() {
    int n;
    printf("请输入学生人数:");
    scanf("%d", &n);

    struct Student students[n];

    // 输入每个学生的信息
    for (int i = 0; i < n; i++) {
        printf("请输入第%d个学生的姓名、语文成绩、数学成绩和英语成绩:", i+1);
        scanf("%s %d %d %d", students[i].name, &students[i].chinese, &students[i].math, &students[i].english);
        students[i].total = students[i].chinese + students[i].math + students[i].english;
    }

    // 找到各科目和总分最低的学生
    int chinese_min = students[0].chinese;
    int math_min = students[0].math;
    int english_min = students[0].english;
    int total_min = students[0].total;

    for (int i = 1; i < n; i++) {
        if (students[i].chinese < chinese_min) {
            chinese_min = students[i].chinese;
        }
        if (students[i].math < math_min) {
            math_min = students[i].math;
        }
        if (students[i].english < english_min) {
            english_min = students[i].english;
        }
        if (students[i].total < total_min) {
            total_min = students[i].total;
        }
    }

    // 输出语文最低成绩的学生
    printf("lower chinese:\n");
    for (int i = 0; i < n; i++) {
        if (students[i].chinese == chinese_min) {
            printf("%s(%d)\n", students[i].name, students[i].chinese);
        }
    }

    // 输出数学最低成绩的学生
    printf("lower math:\n");
    for (int i = 0; i < n; i++) {
        if (students[i].math == math_min) {
            printf("%s(%d)\n", students[i].name, students[i].math);
        }
    }

    // 输出英语最低成绩的学生
    printf("lower english:\n");
    for (int i = 0; i < n; i++) {
        if (students[i].english == english_min) {
            printf("%s(%d)\n", students[i].name, students[i].english);
        }
    }

    // 输出总分最低的学生
    printf("lower score:\n");
    for (int i = 0; i < n; i++) {
        if (students[i].total == total_min) {
            printf("%s(%d)\n", students[i].name, students[i].total);
        }
    }

    return 0;
}

  1. 首先,通过 scanf 函数获取输入的学生人数,并将其存储在变量 n 中。

  2. 声明了一个结构体 struct Student,用于存储学生的姓名、语文成绩、数学成绩、英语成绩和总分。

  3. 创建了一个长度为 n 的数组 students,用于存储每个学生的信息。

  4. 使用 for 循环,迭代 n 次,获取每个学生的姓名、语文成绩、数学成绩和英语成绩,并计算出总分,然后将这些信息存储在对应的 students 数组元素中。

  5. 初始化了变量 chinese_minmath_minenglish_mintotal_min,并将它们分别设置为第一个学生的语文成绩、数学成绩、英语成绩和总分。

  6. 使用 for 循环,从第二个学生开始遍历 students 数组,逐个比较找到最低的语文成绩、数学成绩、英语成绩和总分,并更新相应的最低值变量。

  7. 使用 for 循环,遍历 students 数组,输出语文成绩等于最低值的学生姓名和成绩。

  8. 同样地,使用 for 循环,输出数学成绩等于最低值的学生姓名和成绩。

  9. 再次使用 for 循环,输出英语成绩等于最低值的学生姓名和成绩。

  10. 最后,使用 for 循环,输出总分等于最低值的学生姓名和总分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/168824.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

B站短视频如何去水印?一键解析下载B站视频!

在浏览B站视频时&#xff0c;我们有时会遇到带有水印的场景。这些水印可能会干扰我们对视频内容的观看体验&#xff0c;特别是在全屏观看时。此外&#xff0c;当我们想要保存或分享这些视频时&#xff0c;水印也会成为一种障碍。因此&#xff0c;去除水印的需求就变得非常迫切。…

JAXB:根据Java文件生成XML schema文件

说明 JAXB有个schemagen脚本&#xff0c;可以根据Java文件生成XML schema。这个工具在JAXB独立发布包中有&#xff0c;可以从官网下载JAXB的独立发布包&#xff1a; https://eclipse-ee4j.github.io/jaxb-ri/ 示例 使用schemagen -d <path> <java files>格式 …

4-5学生分数对应的成绩

![#include<stdio.h> int main(){float score;char grade;for(int i0;i<7;i){printf("请输入成绩&#xff1a;");scanf("%f",&score);while(score>100||score<0){printf("\n输入的成绩有误&#xff0c;请重新输入&#xff1a;&quo…

「实体京东」:汽车行业里的一盘棋

在消费升级&#xff0c;产业愈发蓬勃发展的未来&#xff0c;不仅是汽车行业&#xff0c;在接下来的一众工业细分方向&#xff0c;供应链的重构和进化都将成为新的主旋律&#xff0c;串点成链&#xff0c;串链成网&#xff0c;通过对成本、效率、体验的重构&#xff0c;进而真正…

5年经验之谈 —— 如何编写有效的接口测试?

简介&#xff1a; 在所有的开发测试中&#xff0c;接口测试是必不可少的一项。有效且覆盖完整的接口测试&#xff0c;不仅能保障新功能的开发质量&#xff0c;还能让开发在修改功能逻辑的时候有回归的能力&#xff0c;同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原…

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards 一、问题描述 在做一个弹窗动画提示的时候遇到了一个问题&#xff1a; 在动画结束的时候&#xff0c;移除元素时会有闪一下的问题&#xff0c;像这样&#xff0c;有残留的痕迹。 我的动画结尾是这…

WebLOAD: 一站式性能测试工具

WebLOAD 是一款一站式前端性能测试工具&#xff0c;对测试人员来说使用非常方便。 它可以帮助前端工程师和测试快速对网页进行性能测试和优化&#xff0c;提高网页加载速度&#xff0c;减少页面卡顿和闪烁。 WebLOAD的特点、使用指南以及企业实际使用中的案列。 WebLOAD的特…

Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案

Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案 也是昨天晚上折腾了一个晚上到凌晨四点多,实在没有头绪,在论坛,贴吧,各种求助查贴,没有什么人解决.后面请教了一个安全圈的大佬朋友给解决了. 我的问题是在kali上的,所以只写了kali 的解决方案: 修改插件: vim /opt/…

零代码编程:用ChatGPT将SRT字幕文件批量转为Word文本文档

一个文件夹中有多个srt视频字幕文件&#xff0c;srt文件里面有很多时间轴&#xff1a; 现在想将其批量转为word文档&#xff0c;去掉里面与字符无关的时间轴&#xff0c;在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量将SRT字幕文件转为…

R语言:利用biomod2进行生态位建模

在这里主要是分享一个不错的代码&#xff0c;喜欢的可以慢慢研究。我看了一遍&#xff0c;觉得里面有很多有意思的东西&#xff0c;供大家学习和参考。 利用PCA轴总结的70个环境变量&#xff0c;利用biomod2进行生态位建模&#xff1a; #------------------------------------…

【计算机网络学习之路】UDP socket编程

文章目录 前言一. 网络通信本质端口号TCP与UDP网络字节序 二. socket编程接口socket()和sockaddr结构体 三. 简单echo服务结束语 前言 本系列文章是计算机网络学习的笔记&#xff0c;欢迎大佬们阅读&#xff0c;纠错&#xff0c;分享相关知识。希望可以与你共同进步。 一. 网…

安卓:Android Studio4.0~2023中正确的打开Android Device Monitor

Android Studio4.0~2023 中如何正确的打开Android Device Monitor(亲测有效) 前些天买了新电脑&#xff0c;安装了新版本的Android Studio4.0想试一试&#xff0c;结果就出现了一些问题。 问题引出&#xff1a; Android Device Monitor在工具栏中找不到&#xff0c;后来上网查…

基于nbiot的矿车追踪定位系统(论文+源码)

1.系统设计 鉴于智能物联网的大趋势&#xff0c;本次基于窄带物联网的矿车追踪定位系统应具备以下功能&#xff1a; &#xff08;1&#xff09;实现实时定位&#xff0c;真正实现矿车随时随地定位; &#xff08;2&#xff09;定位精度高&#xff0c;采用该系统可以实现矿车在…

dump备份命令

dump备份文件系统&#xff0c;或者目录 文件系统有等级划分&#xff0c;0为全部备份&#xff0c;1.针对上一次有变动的文件进行备份&#xff0c;以此类崔 目录备份&#xff1a;只有一个等级0&#xff0c; 针对文件系统类型有要求ext2&#xff0c;ext3&#xff0c;如果是其他…

数据分析基础之《jupyter notebook工具》

一、安装库 1、linux库 yum install python3-devel 2、python库 pip3 install -U matplotlib pip3 install -U numpy pip3 install -U pandas pip3 install -U TA-Lib pip3 install -U tables pip3 install -U notebook 3、如果TA-Lib安装不上&#xff0c;先手动安装依赖库 …

Servlet---上传文件

文章目录 上传文件的方法上传文件的示例前端代码示例后端代码示例 上传文件的方法 上传文件的示例 前端代码示例 <body><form action"upload" method"post" enctype"multipart/form-data"><input type"file" name&qu…

transformer学习资料

一、NLP 自然语言处理 NLP 是机器学习在语言学领域的研究&#xff0c;专注于理解与人类语言相关的一切。NLP 的目标不仅是要理解每个单独的单词含义&#xff0c;而且也要理解这些单词与之相关联的上下文之间的意思。 常见的NLP 任务列表&#xff1a; 对整句的分类&#xff1…

【C/PTA】函数专项练习(一)

本文结合PTA专项练习带领读者掌握函数&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 目录 6-1 输出星期名6-2 三整数最大值6-3 数据排序6-4 多项式求值 6-1 输出星期名 请编写函数&#xff0c;根据星期数输出对应的星期名。 函数原…

xss漏洞挖掘

xss漏洞挖掘 以xss-challenge第二关为例 输入123 查看网页源代码 发现value值原样返回 手动挖掘 此处发现尖括号和双引号闭合完整&#xff0c;因此可以直接使用<script>alert(/xss/)</script>测试 发现提交过后标签内容被双引号闭合进去了 因此此处需要将标签…

CAS还能这样理解??

1.CAS全称 全称&#xff1a;compare and swap&#xff0c;比较并交换。 虽然翻译过来是[比较并交换]&#xff0c;但它是一个原子性的操作&#xff0c;对应到CPU指令为cmpxchg。 2.通俗理解CAS CAS 有三个操作数:当前值A、内存值V、要修改的新值B。假设 当前值A 跟 内存值V 相…
最新文章