当前位置:首页 » 《随便一记》 » 正文

2024入门测参考答案(c语言版)

6 人参与  2024年10月31日 18:01  分类 : 《随便一记》  评论

点击全文阅读


先自己看代码思考,不理解的地方可以截图私聊……

7-1 祝福祖国!

这是一个编程题模板。

2024年即将到来,作为一名大学生,为了表达在新的一年里,对祖国的祝福,请编写程序输出祝福语:在新的一年里,愿祖国更加强大,国民更加幸福!

输入格式:

此题无输入。

输出格式:

在新的一年里,愿祖国更加强大,国民更加幸福!

输入样例:

 

输出样例:

在新的一年里,愿祖国更加强大,国民更加幸福!

参考答案:

#include<stdio.h>int main(){    printf("在新的一年里,愿祖国更加强大,国民更加幸福!");}

7-2 宇宙无敌大招呼

据说所有程序员学习的第一个程序都是在屏幕上输出一句“Hello World”,跟这个世界打个招呼。作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼。

输入格式:

输入在第一行给出一个星球的名字S,是一个由不超过7个英文字母组成的单词,以回车结束。

输出格式:

在一行中输出Hello S,跟输入的S星球打个招呼。

输入样例:

Mars

输出样例:

Hello Mars

 参考答案:

#include<stdio.h>int main(){    char name[10];    gets(name);    printf("Hello ");    for (int i = 0; name[i] != '\0'; i++) {        printf("%c", name[i]);    }}

 7-3 2018我们要赢

2018年天梯赛的注册邀请码是“2018wmyy”,意思就是“2018我们要赢”。本题就请你用汉语拼音输出这句话。

输入格式:

本题没有输入。

输出格式:

在第一行中输出:“2018”;第二行中输出:“wo3 men2 yao4 ying2 !”。

输入样例:

本题没有输入。

输出样例:

2018wo3 men2 yao4 ying2 !

参考答案:

#include<stdio.h>int main(){    printf("2018\n");    printf("wo3 men2 yao4 ying2 !");}

7-4 重要的话说三遍

这道超级简单的题目没有任何输入。

你只需要把这句很重要的话 —— “I'm gonna WIN!”——连续输出三遍就可以了。

注意每遍占一行,除了每行的回车不能有任何多余字符。

参考答案:

#include<stdio.h>int main(){    for (int i = 0; i < 3; i++) {        printf("I'm gonna WIN!\n");    }}

7-5 计算天数

本题要求编写程序计算某年某月某日是该年中的第几天。

输入格式:

输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。

输出格式:

在一行输出日期是该年中的第几天。

输入样例1:

2009/03/02

输出样例1:

61

输入样例2:

2000/03/02

输出样例2:

62

参考答案:

#include<stdio.h>int common_year[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};int leap_year[] = {0,31,29,31,30,31,30,31,31,30,31,30,31};int main(){    int year,month,day;    scanf("%d/%d/%d",&year,&month,&day);    int ans = 0;    if (year%400 == 0 || (year%4 == 0 && year%100 != 0)) {        for (int i = 0; i < month; i++) {            ans += leap_year[i];        }        ans += day;    }else {        for (int i = 0; i < month; i++) {            ans += common_year[i];        }        ans += day;    }    printf("%d",ans);}

7-6 输出上半张九九乘法表

请输出上半张九九乘法表,即下三角的半张。

1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9        2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18               3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27                      ......                                                 8*8=64 8*9=72                                                         9*9=81 

输入格式:

输出格式:

按下面的格式输出,每个乘法结果值占2位(默认右对齐),其他数值仅占1位,每对之间一个空格隔开,最后一个也有空格,即每行结束后都有一空格,如1×9=9后有一空格再回车到第二行。

注意:从第二行开始前面都有空格,提示每个乘法共占6位,一定要注意上下是对齐的。

1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9        2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18               3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27                     ......                                           7*7=49 7*8=56 7*9=63                                                  8*8=64 8*9=72                                                         9*9=81

输入样例:

输出样例:

1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9        2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18               3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27                      4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36                             5*5=25 5*6=30 5*7=35 5*8=40 5*9=45                                    6*6=36 6*7=42 6*8=48 6*9=54                                           7*7=49 7*8=56 7*9=63                                                  8*8=64 8*9=72                                                         9*9=81 

参考答案:

#include<stdio.h>int main(){    for (int i = 1; i <= 9; i++) {        int blank_num = (i-1)*7;        for (int j = 0; j < blank_num; j++) {            printf(" ");        }        for (int j = i; j <= 9; j++) {            printf("%d*%d=%2d ",i,j,i*j);        }        printf("\n");    }}

7-7 加法口诀表

请编写程序,输出 n+n 的加法口诀表。

样例输入
5
样例输出
1+1= 2 2+1= 3 3+1= 4 4+1= 5 5+1= 61+2= 3 2+2= 4 3+2= 5 4+2= 6 5+2= 71+3= 4 2+3= 5 3+3= 6 4+3= 7 5+3= 81+4= 5 2+4= 6 3+4= 7 4+4= 8 5+4= 91+5= 6 2+5= 7 3+5= 8 4+5= 9 5+5=10

注:和的域宽2格(右对齐);两列之间空1格;行末没有空格。

参考答案:

#include<stdio.h>int main(){    int n;    scanf("%d",&n);    for (int i = 1; i <= n; i++) {        for (int j = 1; j <= n; j++) {            if (j > 1) printf(" ");            printf("%d+%d=%2d",j,i,j+i);        }        printf("\n");    }}

7-8 输出下三角队形,数值从大到小,逐渐增长

输出下三角队形,数值从大到小,逐渐增长

输入格式:

m

输出格式:

1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1

输入样例:

在这里给出一组输入。例如:

6

输出样例:

在这里给出相应的输出。例如:

1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1 

参考答案:

#include<stdio.h>int main() {    int n;    scanf("%d",&n);    for (int i = 1; i <= n; i++) {        for (int j = i; j >= 1; j--) {            printf("%d ",j);        }        printf("\n");    }}

7-9 素数对猜想

让我们定义dn​为:dn​=pn+1​−pn​,其中pi​是第i个素数。显然有d1​=1,且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

参考答案:

#include<stdio.h>#include <stdbool.h>bool isPrime(int x) {    bool flag = true;    if (x == 1) flag = false;    if (x == 2) flag = true;    if (x > 2) {        for (int i = 2; i <= sqrt(x); i++) {            if (x%i == 0) {                flag = false;                break;            }        }    }    return flag;}int main(){    int n;    scanf("%d",&n);    int prime[9999];    int index = 0;    int ans = 0;    for (int i = 1; i <= n; i++) {        if (isPrime(i) == true) {            prime[index] = i;            index++;        }    }    for (int i = 1; i < index; i++) {        if (prime[i] - prime[i-1] == 2) {            ans++;        }    }    printf("%d",ans);}

7-10 求n以内最大的k个素数以及它们的和

本题要求计算并输出不超过n的最大的k个素数以及它们的和。

输入格式:

输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。

输出格式:

在一行中按下列格式输出:

素数1+素数2+…+素数k=总和值

其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。

输入样例1:

1000 10

输出样例1:

997+991+983+977+971+967+953+947+941+937=9664

输入样例2:

12 6

输出样例2:

11+7+5+3+2=28

参考答案:

#include<stdio.h>int isPrime(int x) {    int flag = 1;    if (x == 1) flag = 0;    if (x == 2) flag = 1;    if (x > 2) {        for (int i = 2; i <= sqrt(x); i++) {            if (x%i == 0) {                flag = 0;                break;            }        }    }    return flag;}int main(){    int n, k;    scanf("%d %d",&n, &k);    int sum = 0;    int flag = 1;    while(n > 0 && k > 0) {        if (isPrime(n) == 1) {            if (flag == 0) printf("+");            printf("%d",n);            sum += n;            flag = 0;            k--;        }        n--;    }    printf("=%d",sum);}

7-11 查找孪生素数

孪生素数是指间隔为2的两个相邻素数,因为它们之间的距离已经近得不能再近了,如同孪生兄弟一样,故将这一对素数称为孪生素数。
例如(3,5),(5,7),(11,13)等
输入2个正整数m和n 求两个数之间的所有孪生素数。

输入格式:

在一行中输入2个整数m和n 。

输出格式:

若该区间有:则输出形如(3,5)素数对,一行输出一对,在最后一行统计输出共有几对孪生素数
若区间没有:输出“没有找到”

输入样例1:

2 20

输出样例1:

(3,5)(5,7)(11,13)(17,19)共找到4对孪生素数

输入样例2:

18  25

输出样例2:

没有找到

参考答案:

#include<stdio.h>#include <stdbool.h>bool isPrime(int x) {    bool flag = true;    if (x == 1) flag = false;    if (x == 2) flag = true;    if (x > 2) {        for (int i = 2; i <= sqrt(x); i++) {            if (x%i == 0) {                flag = false;                break;            }        }    }    return flag;}int main(){    int m,n;    scanf("%d %d",&m, &n);    if (m > n) {        int temp = m;        m = n;        n = temp;    }    int prime[9999];    int index = 0;    int ans = 0;    for (int i = m; i <= n; i++) {        if (isPrime(i) == true) {            prime[index] = i;            index++;        }    }    for (int i = 1; i < index; i++) {        if (prime[i] - prime[i-1] == 2) {            ans++;            printf("(%d,%d)\n",prime[i-1],prime[i]);        }    }    if (ans == 0) {        printf("没有找到");    }else{        printf("共找到%d对孪生素数",ans);    }}

7-12 验证“哥德巴赫猜想”

数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:

输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:

在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:

24

输出样例:

24 = 5 + 19

 参考答案:

#include<stdio.h>#include <stdbool.h>bool isPrime(int x) {    bool flag = true;    if (x == 1) flag = false;    if (x == 2) flag = true;    if (x > 2) {        for (int i = 2; i <= sqrt(x); i++) {            if (x%i == 0) {                flag = false;                break;            }        }    }    return flag;}int main(){    int n;    scanf("%d",&n);    for(int i = 2; i <= n; i++) {        if (isPrime(i) == true && isPrime(n-i) == true) {            printf("%d = %d + %d",n,i,n-i);            break;        }    }}  

7-13 天梯赛座位分配

天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位号,从 1 开始编号。

输入格式:

输入在一行中给出参赛的高校数 N (不超过100的正整数);第二行给出 N 个不超过10的正整数,其中第 i 个数对应第 i 所高校的参赛队伍数,数字间以空格分隔。

输出格式:

从第 1 所高校的第 1 支队伍开始,顺次输出队员的座位号。每队占一行,座位号间以 1 个空格分隔,行首尾不得有多余空格。另外,每所高校的第一行按“#X”输出该校的编号X,从 1 开始。

输入样例:

33 4 2

输出样例:

#11 4 7 10 13 16 19 22 25 2831 34 37 40 43 46 49 52 55 5861 63 65 67 69 71 73 75 77 79#22 5 8 11 14 17 20 23 26 2932 35 38 41 44 47 50 53 56 5962 64 66 68 70 72 74 76 78 8082 84 86 88 90 92 94 96 98 100#33 6 9 12 15 18 21 24 27 3033 36 39 42 45 48 51 54 57 60

参考答案:

#include<stdio.h>int main(){    int n = 0;    scanf("%d", &n);    int num[120] = {0};    int max = 0;    int id = 0;    int pos[120][15][15] = {0};    int pre = 0;     //输入各高校队伍数并求出最大的队伍数    for (int i = 1; i <= n; i++)    {        scanf("%d", &num[i]);        max = num[i] > max ? num[i] : max;    }     //编号    for (int j = 1; j <= max; j++)    {        for (int k = 1; k <= 10; k++)        {            for (int i = 1; i <= n; i++)            {                if (j <= num[i])                {                    //同一个学校隔位坐                    if (pre == i)                    {                        id += 2;                    }                    else                    {                        //不同学校正常坐                        id += 1;                    }                    pre = i;                    pos[i][j][k] = id;                }            }        }    }     //打印编号信息    for (int i = 1; i <= n; i++)    {        printf("#%d\n", i);        for (int j = 1; j <= num[i]; j++){            for (int k = 1; k <= 10; k++){                if (k > 1){                    printf(" ");                }                printf("%d", pos[i][j][k]);             }             printf("\n");        }    }    return 0;}

7-14 打印沙漏

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

***** ***  * ********

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

19 *

输出样例:

***** ***  * ********2

参考答案: 

#include<stdio.h>#include<math.h>int main(){    int n;    char c;    scanf("%d %c",&n,&c);        int m=sqrt((n+1)/2);    for(int i = 1;i <= m; i++){        for(int j = 0; j < i-1; j++){            printf(" ");        }        for(int j = 1; j <= 2*m-2*i+1; j++){            printf("%c",c);        }        printf("\n");    }        for(int i = 1; i <= m-1; i++){        for(int j = 1; j <= m-i-1; j++){            printf(" ");        }        for(int j = 1; j <= 2*(i+1)-1; j++){            printf("%c",c);        }        printf("\n");    }        printf("%d",n-2*m*m+1);}

7-15 币值转换

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

输入格式:

输入在一行中给出一个不超过9位的非负整数。

输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB

 参考答案:

#include<stdio.h>int main(){    char rate[10] = {'0','0','S','B','Q','W','S','B','Q','Y'};    char flag[10] = {'a','b','c','d','e','f','g','h','i','j'};    char num[10];    int n;    scanf("%d",&n);        if(n == 0){        printf("a");        return 0;    }    int i = 0;    while(n != 0){        num[i+1] = n % 10;        n /= 10;        i++;    }        for(i ; i > 0 ; i--){        if(num[i] == 0 &&num[i-1] == 0){            if(i == 5){                printf("%c",rate[i]);            }            continue;        }        printf("%c",flag[num[i]]);        if(i != 1 && num[i] != 0){        printf("%c",rate[i]);        }    }    return 0;}

7-16 N个数求和

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:

输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:

52/5 4/15 1/30 -2/60 8/3

输出样例1:

3 1/3

输入样例2:

24/3 2/3

输出样例2:

2

输入样例3:

31/3 -1/6 1/8

输出样例3:

7/24

参考答案: 

#include<stdio.h>typedef long long ll;int n;ll zi[110];ll mu[110];//求最大公因数,用于化简ll gcd(ll a,ll b) {    return a%b == 0 ? b : gcd(b, a%b);}int main(){    scanf("%d",&n);    for (int i = 1; i <= n; i++) {        scanf("%lld/%lld",&zi[i],&mu[i]);    }    //只有一个分数直接输出    if (n == 1) {        printf("%lld/%lld\n",zi[1]/(gcd(zi[1],mu[1])),mu[1]/(gcd(zi[1],mu[1])));    }else {        ll a = zi[1];        ll b = mu[1];        for (int i = 2; i <= n; i++) {            a = a*mu[i] + zi[i]*b;            b *= mu[i];            int temp_a = a/gcd(a,b);            int temp_b = b/gcd(a,b);            a = temp_a;            b = temp_b;        }        if (a%b == 0) {            printf("%lld",a/b);        }else {            //处理真分数            if (a < b) {                printf("%lld/%lld",a/gcd(a,b),b/gcd(a,b));            }            //处理假分数            else {                printf("%lld %lld/%lld",a/b, (a%b)/gcd(a%b,b), b/gcd(a%b,b));            }                    }    }    }


点击全文阅读


本文链接:http://zhangshiyu.com/post/180633.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1