东华大学2020考研计算机复试准备上机题解析答案_基础篇(1-30)

前言

提交代码:
选择C++编程语言,因为有的时候会用到C++的一些方便的头文件什么的,还有我编写代码是有一部分是纯C的,因为做题来讲C的scanf和printf很方便。

发布文章安排:
我会抽时间发文章的,看时间安排了,现在时间有点紧吧。马上过年了。过完年要开始准备准备其他东西了

解题解法质量:
关于我的解法和代码的精简程度,我是以当时做题的心态来解题的,由于当时急着刷完所有题目,所以难免会有一些题应该有其他更优的解法,我却用了比较暴力一点的,毕竟当时的劳动强度有点大,抓进度来着,如果有更好的解法,欢迎联系我,或者直接评论,共同学习,共同进步!

联系方式:

如果有问题交流咨询,可以加入QQ群:673852347

其他未尽事宜,还望海涵!

1 计算球体积

作者: xxx 时间限制: 1S 章节: 顺序结构

问题描述 :

根据输入的半径值,计算球的体积。

球体积的计算公式为:

4/3 * PI * r3

其中PI的取值为:3.1415927

输入说明 :

输入数据为一个实数,表示球的半径,半径范围为[0,1000]。

输出说明 :

输出对应的球的体积,计算结果保留三位小数。不要输出多余空格。

输入范例 :

1.1
输出范例 :

5.575

这是AC代码:是一个基础题,注意使用double的浮点类型,如果使用float可能不会通过哦。还有.3f这种printf的输出格式,如果不懂,可以百度一下。以后还要用到,用处很大

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershellQQ群:673852347
int main()
{
    double PI=3.1415927,r;
    while(scanf("%lf",&r)!=EOF)
        printf("%.3f\n",PI*r*r*r*4/3);
    return 0;
}

打个广告呀! 欢迎志同道合的朋友加入编程交流QQ群673852347

2 计算两点间的距离

作者: XXX 时间限制: 1S 章节: 顺序结构

问题描述 :

输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。

输入说明 :

输入数据由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。

输出说明 :

输出结果,保留两位小数。

输入范例 :

3 4 -10 0
输出范例 :

13.60

以下是AC代码:
这个需要用到math.h的头文件。为了代码看起来精简舒服,我写的时候尽量排版好,EOF是读取到文件末尾的意思,本题里面可以不使用while的,在后面的题里需要必须使用EOF了。这里先一笔带过

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershellQQ群:673852347
#include<math.h>
int main()
{
    double x1,x2,y1,y2;
    while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF)
        printf("%.2f\n",sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
    return 0;
}

打个广告呀! 欢迎志同道合的朋友加入编程交流QQ群673852347

3 大小写转换

作者: 江宝钏 时间限制: 1S 章节: 顺序结构

问题描述 :

从键盘输入一个大写字母,改用小写字母输出。

输入说明 :

一个大写英文字符

输出说明 :

对应的小写英文字符。

输入范例 :

A
输出范例 :

a

以下是AC代码:
这也是一个基础题,考察的是ascll码,要能熟悉和运用ascll码的常用字符

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershellQQ群:673852347
int main()
{
    char c;
    scanf("%c",&c);
    printf("%c\n",c-'A'+'a');
    return 0;
}

4 温度转换

作者: Turbo 时间限制: 1S 章节: 顺序结构

问题描述 :

从键盘输入一个摄氏温度,要求转换成华氏温度输出。摄氏温度转换为华氏温度的公式为(其中c表示摄氏温度,f表示华氏温度): f=(9/5)*c+32

输入说明 :

输入一个摄氏温度

输出说明 :

输出对应的华氏温度。注意,输出结果保留两位小数,小数点后第三位四舍五入到小数点后第二位,但小数点后总共输出6位(即最后需要输出4个0)。

输入范例 :

26.67
输出范例 :

80.010000

AC代码:
需要注意的是,整型数相除时候,要加.0可以使整型数变成浮点数,这样运算就不会有精度偏差了,不然9/5等于1呀

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershellQQ群:673852347
int main()
{
    double c;
    scanf("%lf",&c);
    printf("%.2f0000\n",9.0/5.0*c+32);
    return 0;
}

5 判断奇偶

作者: Turbo 时间限制: 1S 章节: 分支结构

问题描述 :

从键盘输入一个整数,编程判断它的奇偶性。

输入说明 :

输入一个数字n

输出说明 :

输出n是奇数还是偶数。比如,输入数字5,则输出“5 is odd”;输入数字6,则输出“6 is even”

输入范例 :

5
输出范例 :

5 is odd

AC代码:
输出即可:

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershell
int main()//水题,QQ群:673852347
{
    int n;
    scanf("%d",&n);
    printf(n%2==0?"%d is even\n":"%d is odd\n",n);
    return 0;
}

6 逆序输出1到4位正整数

作者: Turbo 时间限制: 1S 章节: 分支结构

问题描述 :

输入一个不多于4位的正整数,要求按逆序打印出各个位上的数字,例如原数为23,应输出32;如原数为8000,应输出0008;如原数为1,则输出1。应测试以下情况:输入的数为1位、2位、3位、4位正整数;此外,还应测试以下异常情况:输入负数或0,或输入的数超过4位。
输入说明 :

输入一个整数,可能为0,也可能为负数。
输出说明 :

输入1到4位的正整数时,输出该数的逆序,如果是其它整数,则输出“error!”。输出时,行首与行尾均无空格。
输入范例 :

8000
输出范例 :

0008

AC代码:
输出逆序,我们之前学过的栈,可以用起来了。当然,不用栈直接按照数组从末输出到头也可以,都行
思想就是把每个位上的数用%10保存到数组里面,然后/10,以此类推
emm,做的时候有个测试用例,应该是不是4位的正整数,然后就没A,改了改就可以了

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershell
int main()
{
    int n,stack[100],top=-1;
    scanf("%d",&n);
    if(n<=0)printf("error!\n");
    else
    {
        while(n)
        {
            stack[++top]=n%10;
            n/=10;
        }
        if(top<=3)//居然还有输入不是1234位正整数的坑,有一个case没过,肯定是因为这
        for(int i=0;i<=top;i++)printf("%d",stack[i]);
        else printf("error!");
        printf("\n");
    }
    return 0;
}

欢迎加入编程交流QQ群673852347,一起玩耍啊

7.简单加减乘除

作者: Turbo 时间限制: 1S 章节: 分支结构

问题描述 :

从键盘输入两个实数到变量a和b中,然后输入一个数字代表进行的运算,该数字为1则代表对a和b做加法,2代表减法,3代表乘法,4代表除法。

如果输入1 3 4,表示进行1/3的操作,结果为0.333333。输出时,保留两位小数,因此输出0.33。

注:可直接使用printf的控制格式实现保留两位小数的目的。

输入说明 :

输入两个实数,再输入一个1到4的整数,三个数字之间以空格分隔。

输出说明 :

输出计算结果,保留两位小数。如果做除法,但分母是0,则输出“error!”。输出时,行首与行尾均无空格。

输入范例 :

1 3 1
输出范例 :

4.00

AC代码:
考察switch分支结构,注意除数为0的情况即可

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershell
int main()//水题
{
    double a,b;
    int c;
    scanf("%lf %lf %d",&a,&b,&c);
    switch(c)
    {
        case 1:printf("%.2f\n",a+b);break;
        case 2:printf("%.2f\n",a-b);break;
        case 3:printf("%.2f\n",a*b);break;
        case 4:if(b==0)printf("error!\n");
            else printf("%.2f\n",a/b);break;
        default:break;
    }
    return 0;
}

8 字母的前趋或后继

作者: Turbo 时间限制: 1S 章节: 分支结构

问题描述 :

输入一个小写英文字母。如果这个字母是英文字母表的前13个字母中的一个(m字母及m以前的字母),则输出它的后一个字母;否则输出它的前一个字母。 比如输入a,则输出b,输入z,则输出y。
输入说明 :

输入一个小写字母,不需要考虑其它字符。在行首和行尾没有多余的空格。
输出说明 :

对应输入的小写字母,输出它对应的前趋或后继字母。行首和行尾不要输出多余的空格。
输入范例 :

a
输出范例 :

b

AC代码:
在这我为了精简代码,使用了三目运算符?: 不懂的同学可自行百度哦;

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershell
int main()//水题,这样精简不过分吧
{char c;scanf("%c",&c);printf("%c\n",c<='m'?c+1:c-1);return 0;
}

9 门票价格计算

作者: Turbo时间限制: 1S章节: 分支结构

问题描述 :

某旅游景点门票价格为每人5元。但团体可以优惠,分为以下情况:

人数超过20,则所有人优惠10%;

人数超过40,则所有人优惠15%;

人数超过80,则所有人优惠20%;

人数超过120,则所有人优惠30%。

请跟据团体的人数,求出该团体的总门票价格。

输入说明 :

输入一个整数i(0≤i≤1,000),表示一个团体的总人数。在行首和行尾没有多余的空格。

输出说明 :

输出一个实数,即该团体需要支付的总票价,精确到小数点后2位。在行首和行尾不要输出多余的空格。

输入范例 :

80
输出范例 :

340.00

AC代码:

#include<stdio.h>//东华我来喽.QAQ.2020考研:summershell
int main()//水题
{
    int n;
    double s;
    scanf("%d",&n);
    if(n<=20)s=n*5.0;
    else if(n<=40)s=n*5.0*(1-0.1);
    else if(n<=80)s=n*5.0*(1-0.15);
    else if(n<=120)s=n*5.0*(1-0.2);
    else s=n*5.0*(1-0.3);
    printf("%.2f\n",s);
    return 0;
}

10 星期几问题

作者: Turbo 时间限制: 1S 章节: 分支结构

问题描述 :

根据一个范围在0至6的整数,用英文输出它对应的是星期几。(0对应Sunday,1对应Monday, 2对应Tuesday, 3对应Wednesday, 4对应Thursday, 5对应Friday, 6对应Saturday)

输入说明 :

输入一个整数n(0 ≤ n ≤ 6)。在行首和行尾没有多余的空格。

输出说明 :

输出一个字符串,即输入n对应的星期几的英文名称,请注意大小写。在行首和行尾不要输出多余的空格。

输入范例 :

0
输出范例 :

Sunday

AC代码:
感觉这题在考英文水平,哈哈哈。
把字符串放进数组里面,使用C++的string类,很快就OK了;

#include<iostream>//东华我来喽.QAQ.2020考研:summershell
using namespace std;
int main()//水题
{
    int n;
    string s[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    cin>>n;
    cout<<s[n]<<endl;
    return 0;
}

欢迎加入编程交流QQ群673852347,一起happy啊

10 怪数

作者: Turbo 时间限制: 1S 章节: 循环

问题描述 :

寻找怪数:有一种奇怪的自然数,它的比其本身小的所有因子之和等于它本身,例如:6=1+2+3,其中1、2、3都是6的因子,编程找出整数N之内的所有怪数。
输入说明 :

输入一个整数N(10<=N≤10000),在行首和行尾没有多余的空格。
输出说明 :

输出N之内(<=N)的所有怪数,每一行输出一个整数。(注:若N中有3个怪数,你则需要输出三行,每行一个怪数。)所有数据前后没有多余的空格,中间也没有多余的空行。
输入范例 :

28
输出范例 :

6
28

我的AC代码:
注意是比自身小的因子,那么我们知道,因子有1,可能有2,那么当我们判断到N/2时候就没必要再判断了,因为比N/2还大的因子,就是N自己了啊

#include<stdio.h>//东华我来喽.QAQ.2020考研
//判断到N/2就OK了,因为N/2下面的因子就是自身了
int main()
{
    int N;
    scanf("%d",&N);
    for(int i=1;i<=N;i++)
    {
        int sum=0;
        for(int j=1;j<=i/2;j++)
        {
            if(i%j==0)sum+=j;       //求出各因子
        }
        if(sum==i)printf("%d\n",i);
    }
    return 0;
}

11 abc数字

作者: Turbo 时间限制: 10S 章节: 循环

问题描述 :

明明的爸爸是一位著名的数学家同时也是一位著名的数学启蒙老师。他经常出一些简单而有趣的数学题目来给刚刚接触数学的小朋友做,培养他们对数学的兴趣。一天,明明的爸爸想到了这样一个题目。如果有a、b、c三个1位的正整数,那么按以下的方法构成2个三位数:第一种方法是a为百位,b为十位,c为个位,构成的数就是abc;第二种方法是c为百位,b为十位,a为个位,构成的数就是cba;然后将这两个三位数相乘,会得到另一个数。现在就要数一下这个相乘后所得到的数中,有几个数字是与a、b、c相同的。例如:a=1,b=2,c=3,这样构成的两个三位数分别是123和321,两数相乘得到39483,在这个数中有2个“3”与c所表示的“3”是一样的,因此有2个数字是与a、b、c其中之一相同的。明明的爸爸决定明天把这道题目给小朋友做,他手头有很多组这样的a、b、c,但是要把所有的a、b、c都通过上述的方法计算出结果来需要很多的时间,明明的爸爸没有那么多的时间,于是他求助于你,请你帮他写一个程序,用来计算出相应的结果。 明明爸爸的问题可以归结为:输入a,b,c三个一位数字,要求abc这样的一个三位数与cba这样的一个三位数相乘,输出其结果,再判断相乘后的结果中的数字中有多少位是与a、b、c相同的,并输出有几位相等。

输入说明 :

你写的程序要求从标准输入设备(通常,键盘为标准输入设备)中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行有三个正整数a、b、c,且a、b、c都为正整数,a、b、c中间用一个空格隔开。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备(通常,显示屏为标准输出设备)中。每组运算结果为两个整数,即abc和cba的乘积和有几位相等,两个数之间用一个空格隔开。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。

输入范例 :

1 1 1
2 2 2
输出范例 :

12321 2
49284 1

AC代码如下:
因为题目说读取多行测试数据,没说具体多少个数据,所以我们就使用while语句读取到文件的末尾即可结束EOF,意思就是读取时发现没东西可以读了,就可以退出while了。
那么思路就很简单了,相乘,然后逐个取出各个位的数字,如下

#include<stdio.h>//东华我来喽.QAQ.2020考研
int main()
{
    int a,b,c,sum;
    while(scanf("%d %d %d",&a,&b,&c)!=EOF)
    {
        int temp=sum=(100*a+10*b+c) * (100*c+10*b+a),count=0;
        while(temp)
        {
            if(temp%10==a || temp%10==b ||temp%10==c)count++;;
            temp/=10;
        }
        printf("%d %d\n",sum,count);
    }
    return 0;
}

12 奇妙的比值

作者: 孙辞海 时间限制: 10S 章节: 循环

问题描述 :

明明喜欢钻研各种各样的数学问题。一天,明明对数的因子产生了兴趣,他想把一个数的所有因子都找出来,然后把它们相加再去除以这个数,这样会得到一个比值。明明想看看不同的数的该比值会有什么不同,以便做研究。

例如6这个数,它一共有4个因子,分别是:1、2、3、6,把他们相加然后再除以6,即1+2+3+6=12,12/6=2,就可以得到2这个比值。

明明为了研究,需要得到大量的比值,但是如果通过手动计算比值的话需要花大量的时间,于是明明就想请你帮忙,帮他写一个程序,能够求数的比值。 明明的问题可以归结为:给你一个数,求所有因子和,把这些因子相加,然后再除以这个数,求得比值。

输入说明 :

你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数n(1≤n≤120),代表所求比值的那个数。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个浮点数,就是所求的比值,保留2位小数。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。(注:最后求得的比值保留2位小数。) 注:通常,显示屏为标准输出设备。

输入范例 :

6
10
输出范例 :

2.00
1.80

AC代码:
有一点需要注意,就是求得的因子必须得是唯一的,例如2*2=4,你不能读入两个2,因为题目说的是各因子之和,那样就重复了。所以我把for的终止条件改成了<开根。然后再特判一下,需不需要加上开根的数。

#include<stdio.h>//东华我来喽.QAQ.2020考研
#include<math.h>
int main()
{
    int N;
    while(scanf("%d",&N)!=EOF)
    {
        int sum=0,i;
        for(i=1;i<sqrt(1.0*N);i++)//用根值提前结束判定
        {
            if(N%i==0)sum=sum+i+N/i;
        }
        if(i==sqrt(1.0*N))sum+=i;;      //如果一个数的因子是X²那么就只能加一个
        printf("%0.2f\n",1.0*sum/N);
    }
    return 0;
}

13 T的倍数N

作者: 程裕强 时间限制: 10S 章节: 循环

问题描述 :

明明学习数学已经有很多年了,对各种各样的数学问题都有研究。有一天,明明的爸爸问明明说:“明明,你觉得你对数字敏感吗?”明明毫不犹豫地回答:“那当然,非常敏感。”于是明明的爸爸就说:“好,那我问你一个问题,如果有一个个位数为7的自然数N,把它的个位数移到最高位,其余各位均右移一位(如127变成712),要求这样得到的一个新的数是原数的T倍。若我现在把自然数T告诉你,你能求出最小的符合条件的自然数N吗?” 明明觉得这个问题很简单,只要按从小到大的顺序把所有是7结尾的自然数找出来,然后交换位置,再除一下,看看倍数是不是T倍就可以了。明明回答爸爸说:“这个问题很简单,来考我吧。”于是明明的爸爸就给了明明一个数字2,让他开始动手寻找。但是,使明明意想不到的是,他找了很久很久,始终没有找到想要的那个数,而当他到查到1000007时,需要的那个数还是没有出现,于是就放弃了。他觉得靠手工查找的话,是无法快速找到的。因此,明明求助于你,请你帮他写一个程序,来解决这个相当棘手的问题。但是他也给了你另外一个条件,如果找到超过1000000时还是没有找到需要的那个数的话,就停止寻找。 明明的问题可以归结为:对于一个个位数为7的自然数N,把它的个位数移到最高位,其余各位均右移一位,要求这样得到的一个新的数是原数的T倍。现给出这个自然数T,求满足这个要求的最小的自然数N。若在[1, 1000000] 的范围内没有找到N,则输出“No”。

输入说明 :

你写的程序要求从标准输入设备(通常,键盘为标准输入设备)中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅有一个自然数T(1≤T≤9)。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备(通常,显示屏为标准输出设备)中。每组运算结果输出一个自然数N或“No”,不包括双引号。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。

输入范例 :

5
3
8
输出范例 :

142857
No
No

AC代码:
正如我在注释中提到的,可以直接研究数变化前后的规律,如例子中T为5时候的142857,假设他是********7。我们有*******75=7*********。一看就是到,原数的个位是7乘5是35,所以,新数应该是7******5。因为新数是7******5,所以老数应该是******57。以此类推*******57乘5.。。。就这么简单的推理过程,已经得到了两位数,那么离答案也就不远了。
但是也可以暴力一点,毕竟这个省力一些,就是需要把数据类型改成long int型,担心长度不够,结果出错。代码如下
编程交流QQ群673852347,交流技术,分享经验!)

#include<stdio.h>//东华我来喽.QAQ.
//其实可以列出等式  ***...***7乘以T=7***...*** 发现没??
//左边的7乘T的个位数就是右边的个位数。而右边的个位数即是左边的十位数,可以递推得到
//但是直接循环也可以做
int weishu(long a)      //判断a有几位数
{
    int t=1;
    while(a/10)
    {
        t++;
        a/=10;
    }
    return t;
}
int main()
{
    int T;
    while(scanf("%d",&T)!=EOF)
    {
        long N,temp=1,i;
        if(T==1)   //1的时候要特判,因为下面的N计算位数是适用于2位及其以上的数
        {
            printf("7\n");
            continue;
        }
        for(N=0;N<100000;++N)//少一位循环,多一分时间
        {
            for(i=weishu(N),temp=1;i;i--)temp*=10; //没用math.h emm杀鸡焉用牛刀
            if(N+temp*7==(N*10+7)*T)
            {
                printf("%ld\n",N*10+7);
                break;
            }
        }
        if(N>=100000)printf("No\n");
    }
    return 0;
}

14 黑色星期五

作者: xxx 时间限制: 1S 章节: 一维数组

问题描述 :

13号又是星期五是一个不寻常的日子吗? 13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13 日落在星期一,星期二…星期日的次数.这个测试从1900年1月1日到 1900+n-1年12月31日.n是一个非负数且不大于400.

这里有一些你要知道的: 1900年1月1日是星期一. 4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.

输入说明 :

一个整数n(1<= n <= 400).

输出说明 :

七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一…星期五的次数.

输入范例 :

20
输出范例 :

36 33 34 33 35 35 34

AC代码:
由于数据量不是很大,所以用最单纯的思路来解这个题目,需要注意闰年的2月情况,每年都要判定一下。我设置的dd变量是一个总天数,用它可以很快的算出当前天数是星期几,然后对应的数据赋值。

#include<stdio.h>//东华我来喽.QAQ.2020考研
int main()
{           //这题也不想研究规律啥的了,直接循环吧
    int n,yy;
    long long int dd=0;//可能很大
    int week[7]={0,0,0,0,0,0,0},month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    scanf("%d",&n);
    for(yy=1900;yy<=1900+n-1;yy++)
    {
        if( (yy%100!=0 && yy%4==0) || (yy%400==0) )month[2]=29;
        else month[2]=28;
        for(int i=1;i<=12;i++)      //12个月鸭!
        {
            for(int j=1;j<=month[i];j++)//每天都要判断一下
            {
                ++dd;
                if(j==13)
                week[dd%7]++;
            }
        }
    }
    printf("%d %d %d %d %d %d %d",week[6],week[0],week[1],week[2],week[3],week[4],week[5]);
    return 0;
}

编程交流QQ群673852347,交流技术,分享经验!)

15 三角形

作者: ZhuKai 时间限制: 10S 章节: 循环

问题描述 :

“明明,你会用1到9这九个数字组成一个三角形吗?”明明的爸爸问明明。明明被问的很莫名其妙,不明白他爸爸在说什么,于是就问道:“用1到9组成三角形???”“是的,我的要求很简单,给你2个数,一个数作为这个三角形的开始,另一个数决定这个三角形的大小。例如我给你5和6这两个数,你就要组成如下的一个三角形:

5
6 7
8 9 1
2 3 4 5
6 7 8 9 1
2 3 4 5 6 7

明白了吗?”
明明观察了许久,终于看出了门道来,说道:“就是说给我2个数,例如5和6,那我就要从5这个数开始构建一个三角形。第一行为一个数字,第二行为2个数字,以此类推,直到第六行的六个数字,且三角形中的数字都是1到9在循环重复,是这样吗?”“明明真聪明,就是这样。”明明爸爸高兴的说道。于是明明的爸爸给了明明很多组这样的数字,明明也构建出了很多个不同的三角形。

你能像明明那样,写一个程序来构建上面的三角形吗?

输入说明 :

你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅有一行,每行有两个整数s和n(1≤s≤9,1≤n≤80),其中s表示位于三角形的最顶端的数字,n表示三角形由几行数字组成。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明 :

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将每组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为构建出来的三角形,三角形中的同一行的数字两两之间用一个空格隔开。每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果后面没有空行。

注:通常,显示屏为标准输出设备。

输入范例 :

1 5
5 6
输出范例 :

1
2 3
4 5 6
7 8 9 1
2 3 4 5 6

5
6 7
8 9 1
2 3 4 5
6 7 8 9 1
2 3 4 5 6 7

AC代码:
这题没啥技巧性,直接按照他说的去做就可以了

#include<stdio.h>//东华我来喽.QAQ.2020考研
int main()
{           //主要是有个啥吧,那个最后一次输出没有空格,我们可以设计个count
    int s,n,count=1;
    while(scanf("%d%d",&s,&n)!=EOF)
    {
        if(count!=1)printf("\n");
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                printf("%d",s++);
                if(s>=10)s=1;
                if(j!=i)printf(" ");
            }
                printf("\n");
        }
        count++;
    }
    return 0;
}

编程交流QQ群673852347,交流技术,分享经验!)

发布了18 篇原创文章 · 获赞 2 · 访问量 180

猜你喜欢

转载自blog.csdn.net/zhou_hao_ran/article/details/104024762