牛客网C语言编程初学者入门训练135题详解

2021/1/2

1、实践出真知

题目描述

于老师经常告诉我们“学习编程最好的办法就是上机实践,因为你要对计算机下指令,想让计算机帮你干活,就得多和计算机‘交流’,实践才能出真知。”

输入描述:

输出描述:

Practice makes perfect!

解答

#include <stdio.h>
int main()
{
    
    
    printf("Practice makes perfect!");
    return 0;
}

2、我是大V

题目描述

每个人都想成为大V ,但要一点一点积累才行,先从小v做起。要求输出由小写字母v组成的大V。

输入描述:

输出描述

v   v 
 v v  
  v

备注

换行使用转义字符‘\n’

解答

#include <stdio.h>
int main()
{
    
    
    printf("v   v\n");
    printf(" v v\n");
    printf("  v\n");
    return 0;
}

3、有容乃大

题目描述

确定不同整型数据类型在内存中占多大(字节),输出不同整型数据类型在内存中占多大(字节)。

输入描述:

输出描述:

不同整型数据类型在内存中占多大(字节),具体格式详见输出样例,输出样例中的?为不同整型数据类型在内存中占的字节数。输出样例如下:
The size of short is ? bytes.
The size of int is ? bytes.
The size of long is ? bytes.
The size of long long is ? bytes.

解答

#include <stdio.h>
int main()
{
    
    
    printf("The size of short is %lld bytes.\n", sizeof(short));
    printf("The size of int is %lld bytes.\n", sizeof(int));
    printf("The size of long is %lld bytes.\n", sizeof(long));
    printf("The size of long long is %lld bytes.\n", sizeof(long long));
    return 0;
}

C6328:大小不匹配:已将"unsigned _int64"作为_Param_(2)传递,但需要使用"int"来调用“printf".

原代码

#include <stdio.h>
int main()
{
    
    
    printf("The size of short is %d bytes.\n", sizeof(short));
    printf("The size of int is %d bytes.\n", sizeof(int));
    printf("The size of long is %d bytes.\n", sizeof(long));
    printf("The size of long long is %d bytes.\n", sizeof(long long));
    return 0;
}

解析

  • 虽然提示上面的错误,但能输出结果
  • 提示已经很明确,说你将一个64位 (8bytes)的无符号整型作为printf的第二个参数传入;
  • 查资料占位符%d在格式化输入输出中代表int(4bytes),%ld代表long int(>=4bytes), %lld代表long long int (8bytes);
  • 问题出在sizeof上,它返回的是一个64位 (8bytes)的无符号整型,所以占位符应该是%lld
  • 补充:sizeof不是函数,而是单目运算符,C/C++语言编译器在预编译阶段的时候就已经处理完了sizeof的问题,也就是说sizeof类似于宏定义,
    sizeof 一般形式为:sizeof(object),也可以sizeof var_char,不过大部分programer习惯用sizeof(),其运算符的含义是:求出对象在计算机内存中所占用的字节数。

4、小飞机

题目描述

KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。

输入描述:

输出描述:

img

解答

#include <stdio.h>
int main()
{
    
    
    printf("     **\n");
    printf("     **\n");
    printf("************\n");
    printf("************\n");
    printf("    *  *\n");
    printf("    *  *");
    return 0;
}

5、反向输出四位数

题目描述

将一个四位数,反向输出。

输入描述:

一行,输入一个整数n(1000 <= n <= 9999)。

输出描述:

针对每组输入,反向输出对应四位数。

输入

1234

输出

4321

解答

//按照int类型输出
#include <stdio.h>
int main()
{
    
    
    int n = 0;
    int result = 0;
    //输入
    scanf("%d",&n);
    //输出
    //个位变千位
    result += n % 10 * 1000;
    //将小数点左移一位
    n /= 10;
    //十位变百位
    result += n % 10 * 100;
        //将小数点左移一位
    n /= 10;
    //百位变十位
    result += n % 10 * 10;
    n /= 10;
    //千位变一位
    result += n;
    printf("%04d",result);
    return 0;
}

//按照str类型输出
#include <stdio.h>
int main()
{
    
    
    int n = 0;
    scanf("%d",&n);
    //当整除后结果为0表示已运算完最高位,跳出循环
    while(n != 0){
    
    
        //依次打印最低位
        printf("%d",n % 10);
        //抹掉最后一位
    	n /= 10;
    }
    return 0;
}

输出8进制,10进制,16进制输出以及高位补0

int PrintVal = 9;
/*按整型输出,默认右对齐*/
printf("%d\n",PrintVal);
/*按整型输出,补齐4位的宽度,补齐位为空格,默认右对齐*/
printf("%4d\n",PrintVal);
/*按整形输出,补齐4位的宽度,补齐位为0,默认右对齐*/
printf("%04d\n",PrintVal);

/*按16进制输出,默认右对齐*/   
printf("%x\n",PrintVal);
/*按16进制输出,补齐4位的宽度,补齐位为空格,默认右对齐*/
printf("%4x\n",PrintVal);
/*按照16进制输出,补齐4位的宽度,补齐位为0,默认右对齐*/
printf("%04x\n",PrintVal);

/*按8进制输出,默认右对齐*/
printf("%o\n",PrintVal);
/*按8进制输出,补齐4位的宽度,补齐位为空格,默认右对齐*/
printf("%4o\n",PrintVal);
/*按照8进制输出,补齐4位的宽度,补齐位为0,默认右对齐*/
printf("%04o\n",PrintVal);

6、大小写转换

题目描述

实现字母的大小写转换。多组输入输出。

输入描述:

多组输入,每一行输入大写字母。

输出描述:

针对每组输入输出对应的小写字母。

输入

A
B

输出

a
b

解答

#include <stdio.h>
int main()
{
    
    
    int ch = 0;
    while((ch = getchar()) != EOF){
    
    
        printf("%c\n",ch+32);
        getchar();//输入一个字符串回车,键盘缓冲区存在两个字符,一个是输入的,另一个是回车的\n,当下次循环读取的时候,会读取\n所以,要吸收掉才行
    }
    return 0;
}

2021/1/3

7、缩短二进制

题目描述

我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。

输入描述:

输出描述:

十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。

备注:

printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示

解答

#include <stdio.h>
int main()
{
    
    
    printf("0%o 0X%X", 1234, 1234);//注意%x和%X输出区别是前者小写后者大写
    return 0;
}

8、十六进制转十进制

题目描述

BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。

输入描述:

输出描述:

十六进制整数ABCDEF对应的十进制整数,所占域宽为15。

备注:

printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。

解答

#include <stdio.h>
int main(){
    
    
    printf("%15d",0xABCDEF);
    return 0;
}

9、printf的返回值

题目描述

KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?

输入描述:

输出描述:

包括两行:
第一行为“Hello world!”
第二行为printf(“Hello world!”)调用后的返回值。

解答

#include <stdio.h>
int main()
{
    
    
    int result = 0;
    result = printf("Hello world!");
    printf("\n%d",result);
    return 0;
}

10、成绩输入输出

题目描述

输入3科成绩,然后把三科成绩输出,成绩为整数形式。

输入描述:

一行,3科成绩,用空格分隔,范围(0~100)。

输出描述:

一行,把3科成绩显示出来,输出格式详见输出样例。

输入

60 80 90

输出

score1=60,score2=80,score3=90

解答

#include <stdio.h>
int main()
{
    
    
    int math;
    int computer;
    int science;
    scanf("%d %d %d",&math,&computer,&science);
    printf("score1=%d,score2=%d,score3=%d",math,computer,science);
    return 0;
}

11、学生基本信息输入输出

题目描述

输入3科成绩,然后把三科成绩输出,成绩为整数形式。

输入描述:

一行,3科成绩,用空格分隔,范围(0~100)。

输出描述:

一行,把3科成绩显示出来,输出格式详见输出样例。

输入

60 80 90

输出

score1=60,score2=80,score3=90

解答

#include <stdio.h>
int main()
{
    
    
    int studentNum;
    float math;
    float science;
    float computer;
    scanf("%d;%f,%f,%f",&studentNum,&math,&science,&computer);
    printf("The each subject score of  No. %d is %.2f, %.2f, %.2f.",studentNum,math,science,computer);
    return 0;
}

12、字符金字塔

题目描述

输入一个字符,用它构造一个三角形金字塔。

输入描述:

输入只有一行,一个字符。

输出描述:

该字符构成的三角形金字塔。

输入

1

输出

    1
   1 1
  1 1 1
 1 1 1 1
1 1 1 1 1

解答

#include <stdio.h>
int main()
{
    
    
    char num;
    scanf("%c", &num);
    for (int i = 0; i < 5; i++) {
    
    
        for (int j = 0; j < 5-1-i; j++) {
    
    
            printf(" ");
        }
        for (int k = 0; k <= i; k++) {
    
    
            printf("%c ", num);
        }
        printf("\n");
    }
    return 0;
}

13、判断字母

题目描述

从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。

输入描述:

多组输入,每行输入包括一个字符。

输出描述:

针对每行输入,输出该字符是字母(YES)或不是(NO)。

输入

H
9

输出

YES
NO

解答

#include <stdio.h>
int main()
{
    
    
    char c;
    while((c = getchar()) != EOF){
    
    
        if((c >= 65 && c <= 90) || (c >= 97 && c <= 122))
            printf("YES\n");
        else
            printf("NO\n");
        getchar();
    }
    return 0;
}

14、 ASCII码

题目描述

BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。

73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33

输入描述:

输出描述:

转换输出题目中给出的所有ASCII到对应的字符。

解答

#include <stdio.h>
#include <string.h>
int main()
{
    
    
    char arr[] = {
    
    73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33};
    for(int i = 0;i<12;i++){
    
    
        printf("%c",arr[i]);
    }
    return 0;
}
//或者
#include <stdio.h>
int main()
{
    
    
    char arr[] = {
    
    73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33};
    for(int i = 0;i<sizeof(arr)/sizeof(arr[0]);i++){
    
    //求数组长度sizeof(arr)/sizeof(arr[0])
        printf("%c",arr[i]);
    }
    return 0;
}

15、出生日期输入输出

题目描述

输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。

输入描述:

输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。

输出描述:

三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。

输入

20130225 

输出

year=2013
month=02
date=25

备注:

通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。

解答

#include <stdio.h>
int main()
{
    
    
    int year = 0;
    int month = 0;
    int date = 0;
    scanf("%4d%2d%2d",&year,&month,&date);
    printf("year=%04d\n",year);
    printf("month=%02d\n",month);
    printf("date=%02d\n",date);
    return 0;
}

16、2的n次方计算

题目描述

不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

输入描述:

多组输入,每一行输入整数n(0 <= n < 31)。

输出描述:

针对每组输入输出对应的2的n次方的结果。

输入

2
10

输出

4
1024

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        printf("%d\n",1 << num);
    }
    return 0;
}

17、按照格式输入并交换输出

题目描述

输入两个整数,范围-231~231-1,交换两个数并输出。

输入描述:

输入只有一行,按照格式输入两个整数,范围,中间用“,”分隔。

输出描述:

把两个整数按格式输出,中间用“,”分隔。

输入

a=1,b=2

输出

a=2,b=1

备注:

如果格式控制串中有非格式字符则输入时也要输入该非格式字符。

解答

#include <stdio.h>
int main()
{
    
    
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("a=%d,b=%d",&a,&b);
    c = a;
    a = b;
    b = c;
    printf("a=%d,b=%d",a,b);
    return 0;
}

18、字符转ASCII码

题目描述

BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,输入一个字符,输出该字符相应的ASCII码。

输入描述:

一行,一个字符。

输出描述:

一行,输出输入字符对应的ASCII码。

输入

c

输出

99

解答

#include <stdio.h>
int main()
{
    
    
    char c = getchar();
    printf("%d",c);
    return 0;
}

19、计算表达式的值

题目描述

请计算表达式“(-8+22)×a-10+c÷2”,其中,a = 40,c = 212。

输入描述:

无。

输出描述:

(-8+22)×a-10+c÷2计算之后的结果,为一个整数。

解答

#include <stdio.h>
int main()
{
    
    
    printf("%d",(-8 + 22) * 40 - 10 + 212 / 2);
    return 0;
}

20、计算带余除法

题目描述

给定两个整数a和b (-10,000 < a,b < 10,000),计算a除以b的整数商和余数。

输入描述:

一行,包括两个整数a和b,依次为被除数和除数(不为零),中间用空格隔开。

输出描述:

一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

输入

15 2

输出

7 1

解答

#include <stdio.h>
int main()
{
    
    
    int a = 0;
    int b = 0;
    scanf("%d %d",&a,&b);
    printf("%d %d",a/b,a%b);
    return 0;
}

21、kiki算数

题目描述

问题:KiKi今年5岁了,已经能够认识100以内的非负整数,并且并且能够进行 100 以内的非负整数的加法计算。不过,BoBo老师发现KiKi在进行大于等于100的正整数的计算时,规则如下:

\1. 只保留该数的最后两位,例如:对KiKi来说1234等价于34;

\2. 如果计算结果大于等于 100, 那么KIKI也仅保留计算结果的最后两位,如果此两位中十位为0,则只保留个位。

例如:45+80 = 25

要求给定非负整数 a和 b,模拟KiKi的运算规则计算出 a+b 的值。

输入描述:

一行,输入两个非负整数a和b,用一个空格分隔。(0 <= a,b<= 231-1)。

输出描述:

针对每组输入,输出按照KiKi的运算规则计算出 a+b 的值。

输入

45 80

输出

25

解答

#include <stdio.h>
int main()
{
    
    
    int a = 0;
    int b = 0;
    int result = 0;
    scanf("%d %d",&a,&b);
    if(a >= 100)
        a %= 100;
    if(b >= 100)
        b %= 100;
    result = a + b;
    if(result >= 100)
        result %= 100;
    printf("%d",result);
    return 0;
}
//简便方法
#include <stdio.h>
int main()
{
    
    
    int a = 0;
    int b = 0;
    scanf("%d %d",&a,&b);
    printf("%d",(a + b) % 100);
    return 0;
}

22、浮点数的个位数字

题目描述

给定一个浮点数,要求得到该浮点数的个位数。

输入描述:

一行,包括一个浮点数。

输出描述:

一行,包含一个整数,为输入浮点数对应的个位数。

输入

13.141

输出

3

解答

#include <stdio.h>
int main()
{
    
    
    float f = 0.0;
    scanf("%f",&f);
    printf("%d",(int)f % 10);
    return 0;
}

23、你能活多少秒

题目描述

问题:一年约有3.156×107s,要求输入您的年龄,显示该年龄合多少秒。

输入描述:

一行,包括一个整数age(0<age<=200)。

输出描述:

一行,包含一个整数,输出年龄对应的秒数。

输入

20

输出

631200000

解答

#include <stdio.h>
int main()
{
    
    
    int age = 0;
    long int b;
    scanf("%d",&age);
    b = age * 3.156e7;
    printf("%ld",b);
    return 0;
}

22、时间转换

题目描述

给定秒数seconds (0< seconds < 100,000,000),把秒转化成小时、分钟和秒。

输入描述:

一行,包括一个整数,即给定的秒数。

输出描述:

一行,包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开。

输入

3661

输出

1 1 1

解答

#include <stdio.h>
int main()
{
    
    
    int seconds = 0;
    scanf("%d",&seconds);
    printf("%d %d %d",seconds/3600,seconds%3600/60,seconds%60);
    return 0;
}

23、总成绩和平均分计算

题目描述

依次输入一个学生的3科成绩,在屏幕上输出该学生的总成绩以及平均成绩。

输入描述:

一行,3科成绩,成绩之间用一个空格隔开。

输出描述:

一行,总成绩和平均成绩(小数点后保留两位),用一个空格隔开。

输入

79.5 80.0 98.0

输出

257.50 85.83

解答

#include <stdio.h>
int main()
{
    
    
    float a = 0.0,b = 0.0,c = 0.0,scores = 0.0,average = 0.0;
    scanf("%f %f %f",&a,&b,&c);
    scores = a + b + c;
    average = scores / 3;
    printf("%.2f %.2f",scores,average);
    return 0;
}

24、计算体重指数

题目描述

问题:计算BMI指数(身体质量指数)。BMI指数(即身体质量指数,简称体质指数又称体重,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。主要用于统计用途,当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时,BMI值是一个中立而可靠的指标

输入描述:

一行,两个整数,分别表示体重(公斤),身高(厘米),中间用一个空格分隔。

输出描述:

一行,BMI指数(保留两位小数)。

输入

70 170

输出

24.22

解答

#include <stdio.h>
int main()
{
    
    
    int height = 0,weight = 0;
    scanf("%d %d",&weight,&height);
    printf("%.2f",(float)weight/(height*height) * 10000);
    return 0;
}

25、计算三角形的周长和面积

题目描述

根据给出的三角形3条边a, b, c(0 < a, b, c < 100,000),计算三角形的周长和面积。

输入描述:

一行,三角形3条边(能构成三角形),中间用一个空格隔开。

输出描述:

一行,三角形周长和面积(保留两位小数),中间用一个空格隔开,输出具体格式详见输出样例。

输入

3 3 3

输出

circumference=9.00 area=3.90

解答

#include <stdio.h>
#include <math.h>
int main()
{
    
    
    int a =0 ,b = 0, c = 0;
    scanf("%d %d %d",&a,&b,&c);
    float circumference = a + b + c;
    float p = circumference/2;
    float area = sqrt(p*(p-a)*(p-b)*(p-c));
    printf("circumference=%.2f area=%.2f",circumference,area);
    return 0;
}

26、计算球体的体积

题目描述

给定一个球体的半径,计算其体积。其中球体体积公式为 V = 4/3*πr3,其中 π= 3.1415926。

输入描述:

一行,用浮点数表示的球体的半径。

输出描述:

一行,球体的体积,小数点后保留3位。

输入

3.0

输出

113.097

解答

#include <stdio.h>
#define PI 3.1415926
int main()
{
    
    
    float r = 0.0;
    scanf("%f",&r);
    printf("%.3f",(4.0/3.0)*PI*r*r*r);
    return 0;
}

27、KIKI和酸奶

题目描述

BoBo买了一箱酸奶,里面有n盒未打开的酸奶,KiKi喜欢喝酸奶,第一时间发现了酸奶。KiKi每h分钟能喝光一盒酸奶,并且KiKi在喝光一盒酸奶之前不会喝另一个,那么经过m分钟后还有多少盒未打开的酸奶?

输入描述:

多组输入,每组输入仅一行,包括n,h和m(均为整数)。输入数据保证m <= n * h。

输出描述:

针对每组输入,输出也仅一行,剩下的未打开的酸奶盒数。

输入

8 5 16

输出

4

解答

#include <stdio.h>
int main()
{
    
    
    int n = 0, h = 0, m = 0;
    scanf("%d %d %d",&n,&h,&m);
    int haveDrinked = 0;
    if(m % h != 0)
        haveDrinked = m / h + 1;
    else
        haveDrinked = m / h;
    if(haveDrinked >= n)
        printf("0");
    else
        printf("%d",n - haveDrinked);
    return 0;
}

28、发布信息

题目描述

你的手机丢了,在屏幕上输出信息告诉大家。

输入描述:

输出描述:

I lost my cellphone!

解答

#include <stdio.h>
int main()
{
    
    
    printf("I lost my cellphone!");
    return 0;
}

29、输出学生信息

题目描述

学生信息管理系统是学校教学管理的重要工具,现有一名学生基本信息如下:姓名-Jack,年龄-18,性别-Man,请按照输出样例的格式输出该学生的信息。

输入描述:

输出描述:

输出分为三行,分别为标题行,分隔行,信息行。
第一行,标题行,每个标题之间间隔4个空格。
第二行,分隔行,一共21个减号"-"。
第三行,信息行,每列输出信息和标题首字母对齐。输出样例如下:
Name    Age    Gender
---------------------
Jack    18     man

解答

#include <stdio.h>
int main()
{
    printf("Name    Age    Gender\n---------------------\nJack    18     man");
    return 0;
}

30、计算平均成绩

题目描述

从键盘输入5个学生的成绩(整数),求他们的平均成绩(浮点数,保留一位小数)。

输入描述:

一行,连续输入5个整数(范围0~100),用空格分隔。

输出描述:

一行,输出5个数的平均数(保留一位小数)。

输入

75 80 43 67 96

输出

72.2

解答

#include <stdio.h>
int main()
{
    
    
    int a=0,b=0,c=0,d=0,e=0;
    scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
    printf("%.1f",(a+b+c+d+e)/5.0);
    return 0;
}

31、进制A+B

题目描述

输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-231~231-1)。

输入描述:

一行,一个十六进制数a,和一个八进制数b,中间间隔一个空格。

输出描述:

一行,a+b的十进制结果。

输入

0x12 05

输出

23

备注:

十六进制Hexadecimal一般以0x开头,例如0xFF。八进制Octal,一般以0开头,例如07。

解答

#include <stdio.h>
int main()
{
    
    
    int a = 0,b = 0;
    scanf("0x%x 0%o",&a,&b);
    printf("%d",a + b);
    return 0;
}

2021/1/4

32、健康评估

题目描述

BMI指数(即身体质量指数)是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。例如:一个人的身高为1.75米,体重为68千克,他的BMI=68/(1.752)=22.2(千克/米2)。当BMI指数为18.5~23.9时属正常,否则表示身体存在健康风险。编程判断人体健康情况。

输入描述:

一行,输入一个人的体重(千克)和身高(米),中间用一个空格分隔。

输出描述:

一行,输出身体Normal(正常)或Abnormal(不正常)。

输入

68 1.75

输出

Normal

输入

67.5 1.65

输出

Abnormal

解答

#include <stdio.h>
int main()
{
    
    
    int weight = 0;
    float height = 0.0;
    float status = 0.0;
    scanf("%d %f",&weight, &height);
    status = weight/(height*height);
    if(status <= 23.9 && status >= 18.5)
        printf("Normal");
    else
        printf("Abnormal");
    return 0;
}

33、判断字母

题目描述

从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。

输入描述:

多组输入,每行输入包括一个字符。

输出描述:

针对每行输入,输出该字符是字母(YES)或不是(NO)。

输入

H
9

输出

YES
NO

解答

#include <stdio.h>
int main()
{
    
    
    char c;
    while((c = getchar()) != EOF){
    
    
        if((c >= 65 && c <= 90) || (c >= 97 && c <= 122))
            printf("YES\n");
        else
            printf("NO\n");
        getchar();
    }
    return 0;
}

34、网购

题目描述

KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。

输入描述:

一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。

输出描述:

一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)

输入

1000.0 11 11 1

输出

650.00

输入

999.8 12 12 0

输出

799.84

输入

66.6 11 11 1

输出

0.00

解答

#include <stdio.h>
int main()
{
    
    
    float price = 0.0;
    int month = 0;
    int day = 0;
    int status = 0;
    float cost = 0.0;
    scanf("%f %d %d %d",&price,&month,&day,&status);
    if(month == 11 && day == 11)
        cost = price * 0.7;
    else if(month == 12 && day == 12)
        cost = price * 0.8;
    if(status == 1)
        cost -= 50;
    if(cost <= 0)
        printf("%.2f",0.00);
    else
        printf("%.2f",cost);
    return 0;
}

35、变种水仙花

题目描述

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。

例如:

655 = 6 * 55 + 65 * 5

1461 = 1 * 461 + 14 * 61 + 146 * 1

求出 5位数中的所有 Lily Number。

输入描述:

输出描述:

一行,5位数中的所有 Lily Number,每两个数之间间隔一个空格。

解答

#include <stdio.h>
int main()
{
    
    
    for(int i=10000;i<=99999;i++){
    
    
        if(i == ((i/10) * (i%10) + (i/100) * (i%100) + (i/1000) * (i%1000) + (i/10000) * (i%10000)))
            printf("%d ",i);
    }
    return 0;
}

36、争夺前五名

题目描述

期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入n个学生成绩(不超过40个),输出每组排在前五高的成绩。

输入描述:

两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。

输出描述:

一行,输出成绩最高的前五个,用空格分隔。

输入

6
99 45 78 67 72 88

输出

99 88 78 72 67

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int n = 0,temp;
    scanf("%d",&n);
    int *arr = (int *)malloc(sizeof(int) * n);//动态分配所需的内存空间,并返回一个指向它的指针。
    for(int i =0;i<n;i++){
    
    
        scanf("%d",&arr[i]);
    }
    //冒泡排序
    for(int i = 0;i < n;i++){
    
    
        for(int j = 0;j<n-1;j++){
    
    
            if(arr[j] < arr[j+1]){
    
    
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    for(int i = 0;i<5;i++){
    
    
        printf("%d ",arr[i]);
    }
    return 0;
}

37、竞选社长

题目描述

假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长.

输入描述:

一行,字符序列,包含A或B,输入以字符0结束。

输出描述:

一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。

输入

ABBABBAAB0

输出

B

解答

#include <stdio.h>
int main()
{
    
    
    int flag = 0;
    char str[30] = {
    
    "0"};
    scanf("%s",&str);
    for(int i =0;i<sizeof(str)/sizeof(str[0]);i++){
    
    
        switch(str[i]){
    
    
            case 'A':
                flag ++;
                break;
            case 'B':
                flag --;
                break;
        }
    }
    if(flag > 0)
        printf("A");
    else if(flag == 0)
        printf("E");
    else if(flag < 0)
        printf("B");
    return 0;
}

38、你是天才吗

题目描述

据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。

输入描述:

多组输入,每行输入包括一个整数表示的智商。

输出描述:

针对每行输入,输出“Genius”。

输入

160

输出

Genius

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        if(num >= 140)
            printf("Genius");
    }
    return 0;
}

39、完美成绩

题目描述

KiKi想知道他的考试成绩是否完美,请帮他判断。从键盘输入一个整数表示的成绩,编程判断成绩是否在90~100之间,如果是则输出“Perfect”。

输入描述:

多组输入,每行输入包括一个整数表示的成绩(90~100)。

输出描述:

针对每行输入,输出“Perfect”。

输入

98

输出

Perfect

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        if(num <= 100 && num >= 90)
            printf("Perfect");
    }
    return 0;
}

40、及格分数

题目描述

KiKi想知道他的考试分数是否通过,请帮他判断。从键盘任意输入一个整数表示的分数,编程判断该分数是否在及格范围内,如果及格,即:分数大于等于60分,是输出“Pass”,否则,输出“Fail”。

输入描述:

多组输入,每行输入包括一个整数表示的分数(0~100)。

输出描述:

针对每行输入,输出“Pass”或“Fail”。

输入

94

输出

Pass

输入

44

输出

Fail

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        if(num >= 60)
            printf("Pass\n");
        else
            printf("Fail\n");
    }
    return 0;
}

41、判断整数奇偶性

题目描述

KiKi想知道一个整数的奇偶性,请帮他判断。从键盘任意输入一个整数(范围-231~231-1),编程判断它的奇偶性。

输入描述:

多组输入,每行输入包括一个整数。

输出描述:

针对每行输入,输出该数是奇数(Odd)还是偶数(Even)。

输入

4
7

输出

Even
Odd

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        if(num % 2 != 0)
            printf("Odd\n");
        else
            printf("Even\n");
    }
    return 0;
}

42、最高分数

题目描述

KiKi参加了语文、数学、外语的考试,请帮他判断三科中的最高分。从键盘任意输入三个整数表示的分数,编程判断其中的最高分。

输入描述:

多组输入,每行输入包括三个整数表示的分数(0~100),用空格分隔。

输出描述:

针对每行输入,输出为一行,即三个分数中的最高分。

输入

94 98 99
100 88 60

输出

99
100

解答

#include <stdio.h>
int main()
{
    int num1 = 0,num2 = 0,num3 = 0,max = 0;
    while(scanf("%d %d %d",&num1,&num2,&num3) != EOF){
        if(num1 > max)
            max = num1;
        if(num2 > max)
            max = num2;
        if(num3 > max)
            max = num3;
        printf("%d\n",max);
        max = 0;
    }
    return 0;
}

43、判断是元音还是辅音

题目描述

KiKi开始学习英文字母,BoBo老师告诉他,有五个字母A(a), E(e), I(i), O(o),U(u)称为元音,其他所有字母称为辅音,请帮他编写程序判断输入的字母是元音(Vowel)还是辅音(Consonant)。

输入描述:

多组输入,每行输入一个字母。

输出描述:

针对每组输入,输出为一行,如果输入字母是元音(包括大小写),输出“Vowel”,如果输入字母是非元音,输出“Consonant”。

输入

A
b

输出

Vowel
Consonant

解答

#include <stdio.h>
int main()
{
    
    
    char c;
    while(scanf("%s",&c) != EOF){
    
    //可以过滤回车换行符
        if(c >= 97)
            c -= 32;
        if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
            printf("Vowel\n");
        else
            printf("Consonant\n");
    }
    return 0;
}
//手动过滤换行符
#include <stdio.h>
int main()
{
    
    
    char c;
    while(scanf("%c",&c) != EOF){
    
    
        if(c >= 97)
            c -= 32;
        if(c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
            printf("Vowel\n");
        else
            printf("Consonant\n");
        getchar();//手动过滤
    }
    return 0;
}

44、判断是不是字母

题目描述

KiKi想判断输入的字符是不是字母,请帮他编程实现。

输入描述:

多组输入,每一行输入一个字符。

输出描述:

针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。

输入

A
6

输出

A is an alphabet.
6 is not an alphabet.

解答

#include <stdio.h>
int main()
{
    
    
    char c;
    while(scanf("%c",&c) != EOF){
    
    
        if((c>=65 && c <=90) || (c>=97 && c <=122))
            printf("%c is an alphabet.\n",c);
        else
            printf("%c is not an alphabet.\n",c);
        getchar();
    } 
    return 0;
}

45、字符大小写转换

题目描述

KiKi想完成字母大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母。

输入描述:

多组输入,每一行输入一个字母。

输出描述:

针对每组输入,输出单独占一行,输出字母的对应形式。

输入

a
A
Z

输出

A
a
z

解答

#include <stdio.h>
int main()
{
    
    
    char c;
    while(scanf("%c",&c) != EOF){
    
    
        if(c>=65 && c <=90)
            printf("%c\n",c+32);
        else if(c>=97 && c <=122)
            printf("%c\n",c-32);
        getchar();
    }
    return 0;
}

46、判断两个数的大小关系

题目描述

KiKi想知道从键盘输入的两个数的大小关系,请编程实现。

输入描述:

题目有多组输入数据,每一行输入两个整数(范围(1 ~231-1),用空格分隔。

输出描述:

针对每行输入,输出两个整数及其大小关系,数字和关系运算符之间没有空格,详见输入输出样例。

输入

1 1

输出

1=1

输入

1 0

输出

1>0

输入

0 1

输出

0<1

解答

#include <stdio.h>
int main()
{
    
    
    int a=0,b=0;
    while(scanf("%d %d",&a,&b) != EOF){
    
    
        if(a > b)
            printf("%d>%d\n",a,b);
        else if(a == b)
            printf("%d=%d\n",a,b);
        else if(a < b)
            printf("%d<%d\n",a,b);
    }
    return 0;
}

47、计算单位阶跃函数

题目描述

KiKi最近学习了信号与系统课程,这门课里有一个非常有趣的函数,单位阶跃函数,其中一种定义方式为:

img

现在试求单位冲激函数在时域t上的值。

输入描述:

题目有多组输入数据,每一行输入一个t(-1000<t<1000)表示函数的时域t。

输出描述:

输出函数的值并换行。

输入

11
0
-11

输出

1
0.5
0

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        if(num > 0)
            printf("1\n");
        else if(num == 0)
            printf("0.5\n");
        else if(num < 0)
            printf("0\n");
    }
    return 0;
}

48、三角形判断

题目描述

KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。

输入描述:

题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。

输出描述:

针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。

输入

2 3 2
3 3 3

输出

Isosceles triangle!
Equilateral triangle!

解答

#include <stdio.h>
int main()
{
    
    
    int a = 0,b = 0,c = 0;
    while(scanf("%d %d %d",&a,&b,&c) != EOF){
    
    
        //判断是否构成三角形
        if(a + b <= c || a + c <= b || b + c <= a)
            printf("Not a triangle!\n");
        else{
    
    
            if(a == b && a == c)
                printf("Equilateral triangle!\n");
            else if((a == b && a != c) || (a == c && a != b) || (c == b && c != a))
                printf("Isosceles triangle!\n");
            else
                printf("Ordinary triangle!\n");
        }
    }
    return 0;
}

49、衡量人体胖瘦程度

题目描述

在计算BMI(BodyMassIndex ,身体质量指数)的案例基础上,判断人体胖瘦程度。BMI中国标准如下表所示。

img

输入描述:

多组输入,每一行包括两个整数,用空格隔开,分别为体重(公斤)和身高(厘米)。

输出描述:

针对每行输入,输出为一行,人体胖瘦程度,即分类。

输入

80 170
60 170
90 160
50 185

输出

Overweight
Normal
Obese
Underweight

解答

#include <stdio.h>
int main()
{
    
    
    int weight = 0, height = 0;
    while (scanf("%d %d", &weight, &height) != EOF) {
    
    
        float bmi = (weight * 10000.0) / (height * height);//注意格式转换的时候精度丢失的问题
        if (bmi < 18.5)
            printf("Underweight\n");
        else if (bmi >= 18.5 && bmi <= 23.9)
            printf("Normal\n");
        else if (bmi > 23.9 && bmi <= 27.9)
            printf("Overweight\n");
        else
            printf("Obese\n");
    }
    return 0;
}

50、计算一元二次方程

题目描述

从键盘输入a, b, c的值,编程计算并输出一元二次方程ax2 + bx + c = 0的根,当a = 0时,输出“Not quadratic equation”,当a ≠ 0时,根据△ = b2 - 4ac的三种情况计算并输出方程的根。

输入描述:

多组输入,一行,包含三个浮点数a, b, c,以一个空格分隔,表示一元二次方程ax2 + bx + c = 0的系数。

输出描述:

针对每组输入,输出一行,输出一元二次方程ax2 + bx +c = 0的根的情况。  如果a = 0,输出“Not quadratic equation”;  如果a ≠  0,分三种情况:△ = 0,则两个实根相等,输出形式为:x1=x2=...。△  > 0,则两个实根不等,输出形式为:x1=...;x2=...,其中x1  <=  x2。△  < 0,则有两个虚根,则输出:x1=实部-虚部i;x2=实部+虚部i,即x1的虚部系数小于等于x2的虚部系数,实部为0时不可省略。实部= -b / (2*a),虚部= sqrt(-△ ) / (2*a)所有实数部分要求精确到小数点后2位,数字、符号之间没有空格。

输入

2.0 7.0 1.0

输出

x1=-3.35;x2=-0.15

输入

0.0 3.0 3.0

输出

Not quadratic equation

输入

1 2 1

输出

x1=x2=-1.00

输入

2 2 5

输出

x1=-0.50-1.50i;x2=-0.50+1.50i

输入

1 0 1

输出

x1=0.00-1.00i;x2=0.00+1.00i
#include <stdio.h>
#include <math.h>
int main()
{
    
    
    float a = 0.0, b = 0.0, c = 0.0;
    while(scanf("%f %f %f",&a,&b,&c) != EOF){
    
    
        if(a == 0.0){
    
    
            printf("Not quadratic equation\n");
        }else{
    
    
            float delta = b * b - 4 * a * c;
            if(delta == 0){
    
    //两个相等实根
                printf("x1=x2=%.2f\n",(-(b + sqrt(delta)))/(2*a));
            }else if(delta < 0){
    
    //两个虚根
                float realPart = -b/(2 * a);//实部
                float imaginaryPart = sqrt(-delta)/(2*a);//虚部
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",realPart,imaginaryPart,realPart,imaginaryPart);
            }else if(delta > 0){
    
    //两个不等实根
                printf("x1=%.2f;x2=%.2f\n",(-(b + sqrt(delta)))/(2*a),(sqrt(delta)-b)/(2*a));
            }
        }
    }
    return 0;
}

2021/1/5

51、获得月份天数

题目描述

KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。

输入描述:

多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。

输出描述:

针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。

输入

2008 2

输出

29

解答

#include <stdio.h>
int main()
{
    
    
    int year = 0,month = 0;
    while(scanf("%d %d",&year,&month) != EOF){
    
    
        int february = 0;
        if((year % 100 != 0 && year % 4 == 0) || (year % 100 == 0 && year % 400 == 0)){
    
    //闰月
            february = 29;
        }else{
    
    //平年
            february = 28;
        }
        switch(month){
    
    
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                printf("31\n");
                break;
            case 2:
                printf("%d\n",february);
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                printf("30\n");
                break;
        }
    }
    return 0;
}

52、简单计算器

题目描述

KiKi实现一个简单计算器,实现两个数的“加减乘除”运算,用户从键盘输入算式“操作数1运算符操作数2”,计算并输出表达式的值,如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。如果操作数2等于0.0,则输出“Wrong!Division by zero!”

输入描述:

多组输入,一行,操作数1运算符操作数2(其中运算符号包括四种:+、-、*、/)。

输出描述:

针对每组输入,输出为一行。

如果操作数和运算符号均合法,则输出一个表达式,操作数1运算符操作数2=运算结果,各数小数点后均保留4位,数和符号之间没有空格。

如果输入的运算符号不包括在(+、-、*、/)范围内,输出“Invalid operation!”。当运算符为除法运算,即“/”时。

如果操作数2等于0.0,则输出“Wrong!Division by zero!”。

输入

1.0+3.0 
1.0;4.0
44.0/0.0

输出

1.0000+3.0000=4.0000
Invalid operation!
Wrong!Division by zero!

解答

#include <stdio.h>
int main()
{
    
    
    double a = 0.0, b = 0.0;//开始用float发现会有精度丢失,先不管了,就用double
    char c = ' ';
    while(scanf("%lf%c%lf",&a,&c,&b) != EOF){
    
    
        switch(c){
    
    
            case '+':
                printf("%.4f%c%.4f=%.4f\n",a,c,b,a + b);
                break;
            case '-':
                printf("%.4f%c%.4f=%.4f\n",a,c,b,a - b);
                break;
            case '*':
                printf("%.4f%c%.4f=%.4f\n",a,c,b,a * b);
                break;
            case '/':
                if(b == 0.0){
    
    
                    printf("Wrong!Division by zero!\n");
                }else{
    
    
                    printf("%.4f%c%.4f=%.4f\n",a,c,b,a / b);
                }
                break;
            default:
                printf("Invalid operation!\n");
                break;
        }
    }
    return 0;
}

53、线段图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。

输入描述:

多组输入,一个整数(1~100),表示线段长度,即“*”的数量。

输出描述:

针对每行输入,输出占一行,用“*”组成的对应长度的线段。

输入

10
2

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

54、正方形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正方形图案。

输入描述:

多组输入,一个整数(1~20),表示正方形的长度,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的对应边长的正方形,每个“*”后面有一个空格。

输入

4

输出

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

输入

5

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0; i< num ;i++){
    
    
            for(int j = 0;j<num;j++){
    
    
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

55、直角三角形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的直角三角形图案。

输入描述:

多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。

输入

4

输出

*
* *
* * *
* * * *

输入

5

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            for(int j = 0;j<i+1;j++){
    
    
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

56、翻转直角三角形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转直角三角形图案。

输入描述:

多组输入,一个整数(2~20),表示翻转直角三角形直角边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的对应长度的翻转直角三角形,每个“*”后面有一个空格。

输入

5

输出

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

输入

6

输出

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

解答

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

57、带空格直角三角形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。

输入描述:

多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。

输入

5

输出

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

输入

4

输出

      * 
    * * 
  * * * 
* * * *

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            for(int j = 0 ;j<num-i-1;j++){
    
    
                printf("  ");
            }
            for(int k = 0;k<i+1;k++){
    
    
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

58、金字塔图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的金字塔图案。

输入描述:

多组输入,一个整数(2~20),表示金字塔边的长度,即“*”的数量,,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格。

输入

4

输出

   * 
  * * 
 * * * 
* * * * 

输入

5

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0; i< num; i++){
    
    
            for(int j = 0;j<num-i-1;j++){
    
    
                printf(" ");
            }
            for(int k = 0;k<i+1;k++){
    
    
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

59、翻转金字塔图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转金字塔图案。

输入描述:

多组输入,一个整数(2~20),表示翻转金字塔边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格。

输入

5

输出

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

输入

6

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0; i< num; i++){
    
    
            for(int j = 0;j<i;j++){
    
    
                printf(" ");
            }
            for(int k = 0;k<num-i;k++){
    
    
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

60、菱形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。

输入描述:

多组输入,一个整数(2~20)。

输出描述:

针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。

输入

2

输出

  * 
 * * 
* * * 
 * * 
  * 

输入

3

输出

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

输入

4

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while (scanf("%d", &num) != EOF) {
    
    
        for (int i = 0; i < num + 1; i++) {
    
    
            for (int j = 0; j < num - i; j++) {
    
    
                printf(" ");
            }
            for (int k = 0; k < i + 1; k++) {
    
    
                printf("* ");
            }
            printf("\n");
        }
        for (int r = 0; r < num; r++) {
    
    
            for (int m = 0; m < r+1; m++) {
    
    
                printf(" ");
            }
            for (int n = 0; n < num-r; n++) {
    
    
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

61、K形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的K形图案。

输入描述:

多组输入,一个整数(2~20)。

输出描述:

针对每行输入,输出用“*”组成的K形,每个“*”后面有一个空格。

输入

2

输出

* * * 
* *  
*   
* *  
* * * 

输入

3

输出

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

输入

4

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            for(int j = 0;j<num-i+1;j++){
    
    
                printf("* ");
            }
            for(int n=0;n<i+1;n++){
    
    
                printf(" ");
            }
            printf("\n");
        }
        for(int k = 0;k<num+1;k++){
    
    
            for(int m = 0;m<k+1;m++){
    
    
                printf("* ");
            }
            for(int r=0;r<num-k;r++){
    
    
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

62、箭形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。

输入描述:

多组输入,一个整数(2~20)。

输出描述:

针对每行输入,输出用“*”组成的箭形。

输入

2

输出

    *
  **
***
  **
    *

输入

3

输出

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

输入

4

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num+1;i++){
    
    
            for(int j = 0;j<num-i;j++){
    
    
                printf("  ");
            }
            for(int k = 0;k<i+1;k++){
    
    
                printf("*");
            }
            printf("\n");
        }
        for(int m = 0;m<num;m++){
    
    
            for(int n = 0;n<m+1;n++){
    
    
                printf("  ");
            }
            for(int r = 0;r<num-m;r++){
    
    
                printf("*");
            }
            printf("\n");
            
        }
    }
    return 0;
}

63、反斜线形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的反斜线形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成反斜线的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的反斜线。

输入

4

输出

*   
 *  
  * 
   *

输入

5

输出

*    
 *   
  *  
   * 
    *

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            for(int j = 0;j<i;j++){
    
    
                printf(" ");
            }
            printf("*");
            for(int k = 0;k<num-i;k++){
    
    
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

64、正斜线形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正斜线形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成正斜线的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的正斜线。

输入

4

输出

   *
  * 
 *  
*   

输入

5

输出

    *
   * 
  *  
 *   
* 

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            for(int k = 0;k<num-i-1;k++){
    
    
                printf(" ");
            }
            printf("*");
            for(int j = 0;j<i;j++){
    
    
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

65、X形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。

输出描述:

针对每行输入,输出用“*”组成的X形图案。

输入

5

输出

*   *
 * * 
  *  
 * * 
*   *

输入

6

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            for(int j = 0;j<num;j++){
    
    
                if(i == j || (i + j) == (num-1)){
    
    
                    printf("*");
                }else{
    
    
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

66、空心正方形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。

输入

4

输出

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

输入

5

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0;i<num;i++){
    
    
            for(int j = 0;j<num;j++){
    
    
                if(j == 0 || i == 0 || i == num-1 || j == num-1){
    
    
                    printf("* ");
                }else{
    
    
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

67、空心三角形图案

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成三角形边的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的“空心”三角形,每个“*”后面有一个空格。

输入

4

输出

*       
* *     
*   *   
* * * * 

输入

5

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        for(int i = 0; i < num;i++){
    
    
            for(int j = 0; j < num; j++){
    
    
                if(j == 0 || i == j || i == num-1){
    
    
                    printf("* ");
                }else{
    
    
                    printf("  ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

68、新年快乐

题目描述

新年到来,输出信息迎接新年。

输入描述:

输出描述:

Happy New Year*2019*

解答

#include <stdio.h>
int main()
{
    
    
    printf("Happy New Year*2019*");
    return 0;
}

69、 平均身高

题目描述

从键盘输入5个人的身高(米),求他们的平均身高(米)。

输入描述:

一行,连续输入5个身高(范围0.00~2.00),用空格分隔。

输出描述:

一行,输出平均身高,保留两位小数。

输入

1.68 1.75 1.82 1.60 1.92

输出

1.75

解答

#include <stdio.h>
int main()
{
    
    
    double a=0.0,b=0.0,c=0.0,d=0.0,e=0.0;
    scanf("%lf %lf %lf %lf %lf",&a,&b,&c,&d,&e);
    printf("%.2f",(a + b + c + d + e)/5);
    return 0;
}

70、挂科危险

题目描述

KiKi想知道这学期他的学习情况,BoBo老师告诉他这学期挂的科目累计的学分,根据所挂学分,判断KiKi学习情况,10分以上:很危险(Danger++),49分:危险(Danger),03:Good。

输入描述:

一行,一个整数(0~30),表示KiKi挂的科目累计的学分。

输出描述:

一行,根据输入的挂科学分,输出相应学习情况(Danger++,Danger,Good)。

输入

14

输出

Danger++

输入

9

输出

Danger

输入

1

输出

Good

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    scanf("%d",&num);
    if(num >= 10){
    
    
        printf("Danger++");
        return 0;
    }else if(num >= 4){
    
    
        printf("Danger");
        return 0;
    }else if(num >= 0){
    
    
        printf("Good");
        return 0;
    }
}

71、HTTP状态码

题目描述

KiKi访问网站,得到HTTP状态码,但他不知道什么含义,BoBo老师告诉他常见HTTP状态码:200(OK,请求已成功),202(Accepted,服务器已接受请求,但尚未处理。)400(Bad Request,请求参数有误),403(Forbidden,被禁止),404(Not Found,请求失败),500(Internal Server Error,服务器内部错误),502(Bad Gateway,错误网关)。

输入描述:

多组输入,一行,一个整数(100~600),表示HTTP状态码。

输出描述:

针对每组输入的HTTP状态,输出该状态码对应的含义,具体对应如下:
200-OK
202-Accepted
400-Bad Request
403-Forbidden
404-Not Found
500-Internal Server Error
502-Bad Gateway

输入

200

输出

OK

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    while(scanf("%d",&num) != EOF){
    
    
        switch(num){
    
    
            case 200:
                printf("OK\n");
                break;
            case 202:
                printf("Accepted\n");
                break;
            case 400:
                printf("Bad Request\n");
                break;
            case 403:
                printf("Forbidden\n");
                break;
            case 404:
                printf("Not Found\n");
                break;
            case 500:
                printf("Internal Server Error\n");
                break;
            case 502:
                printf("Bad Gateway\n");
                break;
        }
    }
    return 0;
}

72、 数字三角形

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。

输入描述:

多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。

输出描述:

针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。

输入

4

输出

1
1 2
1 2 3
1 2 3 4

输入

5

输出

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

解答

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

73、公务员面试

题目描述

公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。

输入描述:

一行,输入7个整数(0~100),代表7个成绩,用空格分隔。

输出描述:

一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。

输入

99 45 78 67 72 88 60

输出

73.00

解答

#include <stdio.h>
int main()
{
    
    
    int arr[7], sum = 0, max = 0, min = 100;
    scanf("%d %d %d %d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4], &arr[5], &arr[6]);
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
    
    
        if (arr[i] > max) {
    
    
            max = arr[i];
        }
        if (arr[i] < min) {
    
    
            min = arr[i];
        }
        sum += arr[i];
    }
    printf("%.2f", (sum/1.0 - max - min) / 5.0);
    return 0;
}

74、有序序列插入一个数

题目描述

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

第一行输入一个整数(0≤N≤50)。第二行输入N个升序排列的整数,输入用空格分隔的N个整数。第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

输入

5
1 6 9 22 30
8

输出

1 6 8 9 22 30

解答

#include <stdio.h>
int main()
{
    
    
    int arr[50], len, newNum, i, j, k;
    scanf("%d", &len);
    for (i = 0; i < len; i++) {
    
    
        scanf("%d", &arr[i]);
    }
    scanf("%d", &newNum);
    for (j = len; j > 0; j--) {
    
    
        if (arr[j - 1] > newNum) {
    
    
            arr[j] = arr[j - 1];
        }
        else {
    
    
            arr[j] = newNum;
            break;
        }
    }
    if (j == 0) {
    
    
        arr[0] = newNum;
    }
    for (k = 0; k < len+1; k++) {
    
    
        printf("%d ", arr[k]);
    }
    return 0;
}

2020/1/6

75、筛选法求素数

题目描述

用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。

输入描述:

多组输入,每行输入一个正整数(不大于100)。

输出描述:

针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,

第二行,输出数组中2之后0 的个数。每行输出后换行。

输入

20

输出

2 3 5 7 11 13 17 19
11

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int num = 0, count = 0;
    while (scanf("%d", &num) != EOF) {
    
    
        int* arr = (int*)malloc(sizeof(int) * num - 2);
        for (int i = 2; i <= num; i++) {
    
    
            arr[i - 2] = i;
        }
        for (int j = 2; j <= num; j++) {
    
    
            for (int k = j-1; k <= num - 2; k++) {
    
    
                if (arr[k] == 0) {
    
    
                    continue;
                }
                if (arr[k] % j == 0) {
    
    
                    arr[k] = 0;
                    count++;
                    continue;
                }
            }
        }
        for (int m = 0; m < num - 2; m++) {
    
    
            if (arr[m] != 0) {
    
    
                printf("%d ", arr[m]);
            }
        }
        printf("\n");
        printf("%d\n", count);
    }
    return 0;
}

76、图像相似度

题目描述

给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

输入描述:

第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。

输出描述:

一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

输入

3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出

44.44

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int row = 0,col = 0,temp = 0,count = 0;//行列
    scanf("%d %d",&row,&col);
    int* arr = (int*)malloc(row*col*sizeof(int));
    for(int i = 0;i<row;i++){
    
    
        for(int j = 0;j<col;j++){
    
    
            scanf("%d",&arr[i*col + j]);
        }
    }
    for(int i = 0;i<row;i++){
    
    
        for(int j = 0;j<col;j++){
    
    
            scanf("%d",&temp);
            if(temp == arr[i*col + j]){
    
    
                count++;
            }
        }
    }
    printf("%.2f",(count*100.0) / (row * col));
    return 0;
}

77、登陆验证

题目描述

有个软件系统登录的用户名和密码为(用户名:admin,密码:admin),用户输入用户名和密码,判断是否登录成功。

输入描述:

多组测试数据,每行有两个用空格分开的字符串,第一个为用户名,第二个位密码。

输出描述:

针对每组输入测试数据,输出为一行,一个字符串(“Login Success!”或“Login Fail!”)。

输入

admin admin

输出

Login Success!

输入

admin abc

输出

Login Fail!

解答

#include <stdio.h>
#include <string.h>
int main()
{
    
    
    char root[20],password[20];
    while(scanf("%s %s",&root,&password) != EOF){
    
    
        if(strcmp(root, "admin") == 0 && strcmp(password, "admin") == 0){
    
    
            //如果返回值小于 0,则表示 str1 小于 str2。
            //如果返回值大于 0,则表示 str1 大于 str2。
            //如果返回值等于 0,则表示 str1 等于 str2。
            printf("Login Success!\n");
        }else{
    
    
            printf("Login Fail!\n");
        }
    }
    return 0;
}

78、学好C++

题目描述

C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期你将学习C++,学好C++,其他编程语言都可以很轻松掌握。

输入描述:

输出描述:

I will learn C++ well!

解答

#include <stdio.h>
int main()
{
    
    
    printf("I will learn C++ well!\n");
    return 0;
}

79、(a+b-c)*d的计算问题

题目描述

这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为一行,包括了用空格分隔的四个整数a、b、c、d(0 < a, b, c, d < 100,000)。输出为一行,为“(a+b-c)*d”的计算结果。

输入描述:

输入为一行,用空格分隔的四个整数a、b、c、d(0 < a, b, c, d < 100,000)。

输出描述:

输出为一行,为“(a+b-c)*d”的计算结果。

输入

1 3 2 4

输出

8

解答

#include <stdio.h>
int main()
{
    
    
    int a=0,b=0,c=0,d=0;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    printf("%d",(a+b-c)*d);
    return 0;
}

80、被5整除问题

题目描述

判断一个整数是否能5整除是一个挺简单的问题,懒惰的KiKi还是不想自己做,于是找到你帮他写代码,你就帮帮他吧。

输入描述:

输入包括一个整数M(1≤M≤100,000)。

输出描述:

输出包括一行,如果M可以被5整除就输出YES,否则输出NO(结果大小写敏感)。

输入

10

输出

YES

输入

9

输出

NO

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    scanf("%d",&num);
    if(num % 5 == 0){
    
    
        printf("YES\n");
    }else{
    
    
        printf("NO\n");
    }
    return 0;
}

81、计算y的值

题目描述

已知一个函数y=f(x),当x < 0时,y = 1;当x = 0时,y = 0;当x > 0时,y = -1。

输入描述:

一行,输入一个整数x。(-10000<x<10000)

输出描述:

一行,输出y的值。

输入

10

输出

-1

输入

-10

输出

1

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    scanf("%d",&num);
    if(num < 0){
    
    
        printf("1");
    }else if(num == 0){
    
    
        printf("0");
    }else{
    
    
        printf("-1");
    }
    return 0;
}

82、包含数字9的数

题目描述

今年是2019年,KiKi想知道1~2019中有多少个包含数字9的数。包含数字的数是指有某一位是“9”的数,例如“2019”、“199”等。

输入描述:

输出描述:

一行,一个整数,表示1~2019中共有多少个数包含数字9。

解答

#include <stdio.h>
int main()
{
    
    
    int count = 0, a = 0, b = 0, c = 0;
    for (int i = 1; i <= 2019; i++) {
    
    
        //个位
        a = i % 10;
        //十位
        b = i / 10 % 10;
        //百位
        c = i / 100 % 10;
        if (a == 9 || b == 9 || c == 9) {
    
    
            count++;
        }
    }
    printf("%d\n", count);
    return 0;
}

83、奇偶统计

题目描述

任意输入一个正整数N,统计1~N之间奇数的个数和偶数的个数,并输出。

输入描述:

一行,一个正整数N。(1≤N≤100,000)

输出描述:

一行,1~N之间奇数的个数和偶数的个数,用空格分开。

输入

5

输出

3 2

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0,singleCount = 0,doubleCount = 0;
    scanf("%d",&num);
    for(int i = 0; i < num; i++){
    
    
        if(i % 2 == 0){
    
    
            doubleCount++;
        }else{
    
    
            singleCount++;
        }
    }
    printf("%d %d",doubleCount,singleCount);
    return 0;
}

84、统计成绩

题目描述

输入n科成绩(浮点数表示),统计其中的最高分,最低分以及平均分。

输入描述:

两行,

第1行,正整数n(1≤n≤100)

第2行,n科成绩(范围0.0~100.0),用空格分隔。

输出描述:

输出一行,三个浮点数,分别表示,最高分,最低分以及平均分(小数点后保留2位),用空格分隔。

输入

5
99.5 100.0 22.0 60.0 88.5

输出

100.00 22.00 74.00

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    double max = 0.00,min = 100.00,sum = 0.00,temp = 0.00,avg = 0.00;
    scanf("%d",&num);
    for(int i = 0;i < num; i++){
    
    
        scanf("%lf",&temp);
        if(temp > max){
    
    
            max = temp;
        }
        if(temp < min){
    
    
            min = temp;
        }
        sum += temp;
    }
    avg = sum / num;
    printf("%.2f %.2f %.2f\n",max,min,avg);
    return 0;
}

85、有序序列插入一个数

题目描述

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

共三行,
第一行输入一个整数(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

输入

7 
5 30 40 50 60 70 90
20

输出

5 20 30 40 50 60 70 90

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int num = 0,newNum=0,status = 1,i = 0,j = 0;
    scanf("%d",&num);
    int* arr = (int*)malloc(num * sizeof(int));
    for(i = 0; i < num; i++){
    
    
        scanf("%d",&arr[i]);
    }
    scanf("%d",&newNum);
    for(j = 0;j<num;j++){
    
    
        if(newNum < arr[j] && status == 1){
    
    
            printf("%d ",newNum);
            status = 0;
        }
        printf("%d ",arr[j]);
    }
    if(status == 1){
    
    
        printf("%d ",newNum);
    }
    return 0;
}

86、密码验证

题目描述

用户登录网站,通常需要注册,一般需要输入两遍密码。请编程判断输入的两次密码是否一致,一致输出“same”,不一致输出“different”

输入描述:

每行有两个用空格分开的字符串,第一个为密码,第二个为重复密码。

输出描述:

每组输出一个字符串(“same”或“different”)。

输入

abc abc

输出

same

解答

#include <stdio.h>
#include <string.h>
int main(){
    
    
    char arr[20],brr[20];
    while(scanf("%s %s",&arr,&brr) != EOF){
    
    
        if(strcmp(arr, brr) == 0){
    
    
            printf("same\n");
        }else{
    
    
            printf("different\n");
        }
    }
    return 0;
}

87、矩阵计算

题目描述

输入NxM矩阵,矩阵元素均为整数,计算其中大于零的元素之和。

输入描述:

第一行为N M(N: 矩阵行数;M: 矩阵列数,且M,N<=10),接下来的N行为矩阵各行。

输出描述:

一行,其中大于零的元素之和。

输入

3 3
2 3 4
-5 -9 -7
0 8 -4

输出

17

解答

#include <stdio.h>
int main()
{
    
    
    int row = 0,col = 0,count = 0,temp = 0;
    scanf("%d %d",&row,&col);
    for(int i = 0;i<row*col;i++){
    
    
        scanf("%d",&temp);
        if(temp > 0){
    
    
            count += temp;
        }
    }
    printf("%d",count);
    return 0;
}

88、成绩输入输出问题

题目描述

输入10科成绩,换行显示输入的10科成绩。

输入描述:

一行,输入10科成绩(整数表示,范围0~100),用空格分隔。

输出描述:

一行,输出输入的10科成绩,用空格分隔。

输入

98 100 99 97 95 99 98 97 96 100

输出

98 100 99 97 95 99 98 97 96 100

解答

#include<stdio.h>
int main()
{
    
    
    char a[20];
    gets(a);
    puts(a);
    return 0;
}

89、逆序输出

题目描述

输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。

输入描述:

一行,输入10个整数(范围-231~231-1),用空格分隔。

输出描述:

一行,逆序输出输入的10个整数,用空格分隔。

输入

1 2 3 4 5 6 7 8 9 10

输出

10 9 8 7 6 5 4 3 2 1

解答

#include <stdio.h>
int main(){
    
    
    int arr[10] = {
    
    0};
    for(int i = 0;i<10;i++){
    
    
        scanf("%d",&arr[i]);
    }
    for(int j = 9;j>=0;j--){
    
    
        printf("%d ",arr[j]);
    }
    return 0;
}

90、统计数据正负个数

题目描述

输入10个整数,分别统计输出正数、负数的个数。

输入描述:

输入10个整数(范围-231~231-1),用空格分隔。

输出描述:

两行,第一行正数个数,第二行负数个数,具体格式见样例。

输入

-1 2 3 -6 7 8 -1 6 8 10

输出

positive:7
negative:3

解答

#include <stdio.h>
int main()
{
    
    
    int positiveNum = 0,negativeNum = 0,temp = 0;
    for(int i = 0;i<10;i++){
    
    
        scanf("%d",&temp);
        if(temp > 0){
    
    
            positiveNum++;
        }else if(temp < 0){
    
    
            negativeNum++;
        }
    }
    printf("positive:%d\n",positiveNum);
    printf("negative:%d\n",negativeNum);
    return 0;
}

91、N个数之和

题目描述

输入数字N,然后输入N个数,计算这N个数的和。

输入描述:

第一行输入一个整数N(0≤N≤50),第二行输入用空格分隔的N个整数。

输出描述:

输出为一行,为第二行输入的“N个整数之和”的计算结果。

输入

5
1 2 3 4 5

输出

15

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0,sum = 0,temp = 0;
    scanf("%d",&num);
    for(int i = 0;i<num;i++){
    
    
        scanf("%d",&temp);
        sum += temp;
    }
    printf("%d",sum);
    return 0;
}

92、最高分与最低分之差

题目描述

输入n个成绩,换行输出n个成绩中最高分数和最低分数的差。

输入描述:

两行,第一行为n,表示n个成绩,不会大于10000。

第二行为n个成绩(整数表示,范围0~100),以空格隔开。

输出描述:

一行,输出n个成绩中最高分数和最低分数的差。

输入

10
98 100 99 97 95 99 98 97 96 100

输出

5

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0,max = 0,min = 100,temp = 0;
    scanf("%d",&num);
    for(int i=0;i<num;i++){
    
    
        scanf("%d",&temp);
        if(temp > max){
    
    
            max = temp;
        }
        if(temp < min){
    
    
            min = temp;
        }
    }
    printf("%d",max-min);
    return 0;
}

93、有序序列判断

题目描述

输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序。

输入描述:

第一行输入一个整数N(3≤N≤50)。
第二行输入N个整数,用空格分隔N个整数。

输出描述:

输出为一行,如果序列有序输出sorted,否则输出unsorted。

输入

5
1 6 9 22 30

输出

sorted

输入

5
3 4 7 2 10

输出

unsorted

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0,status = NULL,temp1 = NULL,temp2 = NULL;
    scanf("%d",&num);
    for(int i = 0;i<num;i++){
    
    
        if(temp1 == NULL){
    
    //第一个数
            scanf("%d",&temp1);
            temp2 = temp1;//临时变量,用于跟下一个数比较
            continue;//进入下次循环
        }
        scanf("%d",&temp1);//能到这一步就表示不是第一个数,按照通用方法处理
        if(temp1 > temp2){
    
    //升序
            if(status == NULL){
    
    //第一次status还没有被标记
                status = 1;//第一次进入,使状态字为升序
            }
            if(status == 0){
    
    //跟之前的排序状态不一致
                printf("unsorted\n");
                return 0;//直接跳出不继续运行
            }
            temp2 = temp1;//更新缓存变量
        }else if(temp1 < temp2){
    
    //降序
            if(status == NULL){
    
    //第一次status还没有被标记
                status = 0;//第一次进入,使状态字为降序
            }
            if(status == 1){
    
    //跟之前的排序状态不一致
                printf("unsorted\n");
                return 0;//直接跳出不继续运行
            }
            temp2 = temp1;//更新缓存变量
        }
    }
    printf("sorted\n");//所有代码执行完毕没有中断表示完全有序
    return 0;
}

94、有序序列插入一个整数

题目描述

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

第一行输入一个整数N(0≤N≤50)。

第二行输入N个升序排列的整数,输入用空格分隔的N个整数。

第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

输入

5
1 6 9 22 30
8

输出

1 6 8 9 22 30

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int num = 0, newNum = 0, status = 1, i = 0, j = 0;
    scanf("%d", &num);
    int* arr = (int*)malloc(sizeof(int) * num);
    for (i = 0; i < num; i++) {
    
    
        scanf("%d", &arr[i]);
    }
    scanf("%d", &newNum);

    for (j = 0; j < num; j++) {
    
    
        if (status == 1) {
    
    
            if (arr[j] > newNum) {
    
    
                printf("%d %d ", newNum, arr[j]);
                status = 0;
            }else {
    
    
                printf("%d ", arr[j]);
            }
        }
        else if (status == 0) {
    
    
            printf("%d ", arr[j]);
        }
    }
    if (status == 1) {
    
    
        printf("%d ", newNum);
    }
    return 0;
}

95、序列中删除指定数字

题目描述

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

输入描述:

第一行输入一个整数(0≤N≤50)。第二行输入N个整数,输入用空格分隔的N个整数。第三行输入想要进行删除的一个整数。

输出描述:

输出为一行,删除指定数字之后的序列。

输入

6
1 2 3 4 5 9
4

输出

1 2 3 5 9

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int num = 0,deleteNum = 0;
    scanf("%d",&num);
    int* arr = (int*)malloc(sizeof(int)*num);
    for(int i = 0;i<num;i++){
    
    
        scanf("%d",&arr[i]);
    }
    scanf("%d",&deleteNum);
    for(int j = 0;j<num;j++){
    
    
        if(arr[j] == deleteNum){
    
    
            continue;
        }else{
    
    
            printf("%d ",arr[j]);
        }
    }
    return 0;
}

96、序列中整数去重

题目描述

输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输出描述:

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

输入

5
10 12 93 12 75

输出

10 12 93 75

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int num = 0,count = 0,status = 1;
    scanf("%d",&num);
    int* arr = (int*)malloc(sizeof(int)*num);
    int* brr = (int*)malloc(sizeof(int)*num);
    for(int i = 0;i<num;i++){
    
    
        scanf("%d",&arr[i]);
    }
    for(int j = 0;j<num;j++){
    
    
        status = 1;
        for(int k = 0;k<count;k++){
    
    
            if(brr[k] == arr[j]){
    
    
                status = 0;
                break;
            }
        }
        if(status == 0){
    
    
            continue;
        }
        printf("%d ",arr[j]);
        brr[count] = arr[j];
        count++;
    }
    return 0;
}

97、有序序列合并

题目描述

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入描述:

输入包含三行,

第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数(范围1~5000),用空格分隔。

第三行包含m个整数(范围1~5000),用空格分隔。

输出描述:

输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

输入

5 6
1 3 7 9 22
2 8 10 17 33 44

输出

1 2 3 7 8 9 10 17 22 33 44

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int num1 = 0,num2 = 0,i = 0,j = 0,k = 0,len1 = 0,len2 = 0;
    scanf("%d %d",&num1,&num2);
    int* arr = (int*)malloc(sizeof(int)*num1);
    int* brr = (int*)malloc(sizeof(int)*num2);
    for(i = 0;i<num1;i++){
    
    
        scanf("%d",&arr[i]);
    }
    for(j = 0;j<num2;j++){
    
    
        scanf("%d",&brr[j]);
    }
    for(k = 0;k<num1+num2;k++){
    
    
        if(len1 == num1){
    
    
            printf("%d ",brr[len2]);
            len2++;
            continue;
        }else if(len2 == num2){
    
    
            printf("%d ",arr[len1]);
            len1++;
            continue;
        }
        if(arr[len1] <= brr[len2]){
    
    
            printf("%d ",arr[len1]);
            len1++;
        }else if(arr[len1] > brr[len2]){
    
    
            printf("%d ",brr[len2]);
            len2++;
        }
    }
    return 0;
}

98、班级成绩输入输出

题目描述

输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。

输入描述:

五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。

输出描述:

五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔。

输入

98.5 96.0 100 99 88
60.5 77 88.5 99 60
80 80.5 89 91 92
93 94 95.5 96 97.5
100 98 88.5 88 78.5

输出

98.5 96.0 100.0 99.0 88.0 481.5
60.5 77.0 88.5 99.0 60.0 385.0
80.0 80.5 89.0 91.0 92.0 432.5
93.0 94.0 95.5 96.0 97.5 476.0
100.0 98.0 88.5 88.0 78.5 453.0

解答

#include <stdio.h>
int main()
{
    
    
    float arr[30] = {
    
    0.0},count = 0.0;
    for(int i = 0;i<5;i++){
    
    
        for(int j = 0;j<5;j++){
    
    
            scanf("%f",arr[i*5+j]);
        }
    }
    for(int k = 0;k<30;k++){
    
    
        printf("%.1f",arr[k]);
        count += arr[k];
        if((k+1) % 5 == 0){
    
    
            printf("%.1f\n",count);
            count = 0.0;
        }
    }
    return 0;
}

99、矩阵元素定位

题目描述

KiKi得到了一个n行m列的矩阵,现在他想知道第x行第y列的值是多少,请你帮助他完成这个任务。

输入描述:

第一行包含两个数n和m,表示这个矩阵包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示矩阵中的元素。接下来一行输入x和y,用空格分隔,表示KiKi想得到的元素的位置。(1≤x≤n≤10,1≤y≤m≤10)

输出描述:

一行,输出一个整数值,为KiKi想知道的值。

输入

2 3
1 2 3
4 5 6
1 2 

输出

2

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int row = 0, col = 0, i = 0, j = 0, x = 0, y = 0;
    scanf("%d %d", &row, &col);
    int arr[row][col];
    for (i = 0; i < row; i++) {
    
    
        for (j = 0; j < col; j++) {
    
    
            scanf("%d", &arr[i][j]);
        }
    }
    scanf("%d %d", &x, &y);
    if (x - 1 <= row && y - 1 <= col) {
    
    
        printf("%d", arr[x-1][y-1]);
    }
    return 0;
}

2021/1/7

100、序列重组矩阵

题目描述

KiKi现在得到一个包含nm个数的整数序列,现在他需要把这nm个数按顺序规划成一个n行m列的矩阵并输出,请你帮他完成这个任务。

输入描述:

一行,输入两个整数n和m,用空格分隔,第二行包含n*m个整数(范围-231~231-1)。(1≤n≤10, 1≤m≤10)

输出描述:

输出规划后n行m列的矩阵,每个数的后面有一个空格。

输入

2 3
1 2 3 4 5 6

输出

1 2 3
4 5 6

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int row = 0,col = 0;
    scanf("%d %d",&row,&col);
    int* arr = (int*)malloc(sizeof(int)*row*col);
    for(int i = 0;i<row*col;i++){
    
    
        scanf("%d",&arr[i]);
        printf("%d ",arr[i]);
        if((i+1) % col == 0){
    
    
            printf("\n");
        }
    }
    return 0;
}

101、最高身高

题目描述

KiKi想从n行m列的方阵队列中找到身高最高的人的位置,请你帮助他完成这个任务。

输入描述:

第一行包含两个整数n和m,表示这个方阵队列包含n行m列。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示方阵中的所有人的身高(保证输入身高都不相同)。(1≤x≤n≤10,1≤y≤m≤10)

输出描述:

一行,输出两个整数,用空格分隔,表示方阵中身高最高的人所在的行号和列号。

输入

2 2
175 180
176 185

输出

2 2

解答

#include <stdio.h>
int main()
{
    
    
    int row = 0, col = 0,max = 0,temp = 0,x = 0,y = 0;
    scanf("%d %d",&row,&col);
    for(int i = 0;i<row*col;i++){
    
    
        scanf("%d",&temp);
        if(temp > max){
    
    
            max = temp;
            x = i / col + 1;
            y = i % col + 1;
        }
    }
    printf("%d %d",x,y);
    return 0;
}

102、矩阵相等判定

题目描述

KiKi得到了两个n行m列的矩阵,他想知道两个矩阵是否相等,请你回答他。(当两个矩阵对应数组元素都相等时两个矩阵相等)。

输入描述:

第一行包含两个整数n和m,表示两个矩阵包含n行m列,用空格分隔。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
从n+2行到2n+1,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第二个矩阵中的元素。
1 < n,m < 10

输出描述:

一行,如果两个矩阵相等输出"Yes"并换行,否则输出"No"并换行。

输入

2 2
1 2
3 4
1 2
3 4

输出

Yes

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int row = 0,col = 0,temp = 0,status = 1;//行列
    scanf("%d %d",&row,&col);
    int* arr = (int*)malloc(row*col*sizeof(int));
    for(int i = 0;i<row;i++){
    
    
        for(int j = 0;j<col;j++){
    
    
            scanf("%d",&arr[i*col + j]);
        }
    }
    for(int i = 0;i<row;i++){
    
    
        for(int j = 0;j<col;j++){
    
    
            scanf("%d",&temp);
            if(temp != arr[i*col + j]){
    
    
                printf("No\n");
                status = 0;
                return 0;
            }
        }
    }
    if(status == 1){
    
    
        printf("Yes\n");
    }
    return 0;
}

103、上三角矩阵判定

题目描述

KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述:

一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

输入

3
1 2 3
0 4 5
0 0 6

输出

YES

解答

//法1
#include <stdio.h>
int main()
{
    
    
    int num = 0,temp = 0;
    scanf("%d",&num);
    for(int i = 0;i < num;i++){
    
    
        for(int j = 0;j < num;j++){
    
    
            scanf("%d",&temp);
            if(j < i && ((i*num)+j) > ((i-1)*num + 3) && temp != 0){
    
    
                printf("NO\n");
                return 0;
            }
        }
    }
    printf("YES\n");
    return 0;
}
//法2
#include <stdio.h>
int main()
{
    
    
    int num = 0,temp = 0;
    scanf("%d",&num);
    for(int i = 0;i < num*num;i++){
    
    
        scanf("%d",&temp);
        if(i%num < i/num && ((i/num)*num)+i%num > (i/num-1)*num + 3 && temp != 0){
    
    
            printf("NO\n");
            return 0;
        }
    }
    printf("YES\n");
    return 0;
}

104、矩阵转置

题目描述

KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。

输入描述:

第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。

输出描述:

输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。

输入

2 3
1 2 3
4 5 6

输出

1 4 
2 5 
3 6 

解答

#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
    int col = 0,row = 0;
    scanf("%d %d",&row,&col);
    int arr[row][col];
    for(int i = 0; i < row; i++){
    
    
        for(int j = 0; j < col; j++){
    
    
            scanf("%d",&arr[i][j]);
        }
    }
    for(int i = 0; i < col; i++){
    
    
        for(int j = 0; j < row; j++){
    
    
            printf("%d ",arr[j][i]);
        }
        printf("\n");
    }
    return 0;
}

105、矩阵交换

题目描述

KiKi有一个矩阵,他想知道经过k次行变换或列变换后得到的矩阵。请编程帮他解答。

输入描述:

第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符'r'时代表进行行变换,当t为字符'c'时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。

输出描述:

输出n行m列,为矩阵交换后的结果。每个数后面有一个空格。

输入

2 2
1 2
3 4
1
r 1 2

输出

3 4 
1 2 

解答

#include <stdio.h>
int main()
{
    
    
    int row = 0, col = 0, k = 0, changeRowCol = 0, changeAnotherRowCol = 0;
    char flag = 'r';
    scanf("%d %d", &row, &col);
    int arr[10][10];
    for (int i = 0; i < row; i++) {
    
    
        for (int j = 0; j < col; j++) {
    
    
            scanf("%d", &arr[i][j]);
        }
    }
    scanf("%d", &k);
    for (int r = 0; r < k; r++) {
    
    
        scanf(" %c %d %d", &flag, &changeRowCol, &changeAnotherRowCol);//做的时候一直堆栈溢出,可能是前面那个回车没法吸收,所以前面加了一个空格就好了
        changeRowCol--;
        changeAnotherRowCol--;
        if (flag == 'r') {
    
    //行变换
            for (int m = 0; m < col; m++) {
    
    
                arr[changeRowCol][m] = arr[changeRowCol][m] ^ arr[changeAnotherRowCol][m];
                arr[changeAnotherRowCol][m] = arr[changeRowCol][m] ^ arr[changeAnotherRowCol][m];
                arr[changeRowCol][m] = arr[changeRowCol][m] ^ arr[changeAnotherRowCol][m];
            }
        }
        else if (flag == 'c') {
    
    //列变换
            for (int n = 0; n < row; n++) {
    
    
                arr[n][changeRowCol] = arr[n][changeRowCol] ^ arr[n][changeAnotherRowCol];
                arr[n][changeAnotherRowCol] = arr[n][changeRowCol] ^ arr[n][changeAnotherRowCol];
                arr[n][changeRowCol] = arr[n][changeRowCol] ^ arr[n][changeAnotherRowCol];
            }
        }
    }
    for (int x = 0; x < row; x++) {
    
    
        for (int y = 0; y < col; y++) {
    
    
            printf("%d ", arr[x][y]);
        }
        printf("\n");
    }
    return 0;
}

106、杨辉三角

题目描述

KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。

输入描述:

第一行包含一个整数数n。 (1≤n≤30)

输出描述:

包含n行,为杨辉三角的前n行,每个数输出域宽为5。

输入

6

输出

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

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    scanf("%d", &num);
    int arr[num][num];
    for (int i = 0; i < num; i++) {
    
    
        for (int j = 0; j < i+1; j++) {
    
    
            if (j == 0 || i == j) {
    
    
                arr[i][j] = 1;
                printf("%5d",1);
            }
            else{
    
    
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
                printf("%5d", arr[i][j]);
            }
        }
        printf("\n");
    }
    return 0;
}

107、井字棋

题目描述

KiKi和BoBo玩 “井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。

输入描述:

三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表示没有棋子,为B代表BoBo玩家的棋子。

输出描述:

如果KiKi获胜,输出“KiKi wins!”;
如果BoBo获胜,输出“BoBo wins!”;
如果没有获胜,输出“No winner!”。

输入

K O B
O K B
B O K

输出

KiKi wins!

解答

#include <stdio.h>
int main()
{
    
    
    char arr[3][3] = {
    
    '0'},temp = '0';
    int status = 0;
    for(int i = 0; i < 3; i++){
    
    
        for(int j = 0; j < 3; j++){
    
    
            scanf(" %c",&arr[i][j]);
        }
    }
    for(int m = 0; m < 3; m++){
    
    //行
        temp = arr[m][0];
        for(int n = 0; n < 3; n++){
    
    
            if(temp == arr[m][n]){
    
    //判断一行中所有的元素是否和第一个相等
                status = 1;
            }else{
    
    
                status = 0;
                break;//只要不相等,就跳出本次循环
            }
        }
        if(status == 1){
    
    
            if(temp == 'K'){
    
    
                printf("KiKi wins!\n");
                return 0;
            }else if(temp == 'B'){
    
    
                printf("BoBo wins!\n");
                return 0;
            }
        }
    }
    for(int m = 0; m < 3; m++){
    
    //列
        temp = arr[0][m];
        for(int n = 0; n < 3; n++){
    
    
            if(temp == arr[n][m]){
    
    //判断一列中所有的元素是否和第一个相等
                status = 1;
            }else{
    
    
                status = 0;
                break;//只要不相等,就跳出本次循环
            }
        }
        if(status == 1){
    
    
            if(temp == 'K'){
    
    
                printf("KiKi wins!\n");
                return 0;
            }else if(temp == 'B'){
    
    
                printf("BoBo wins!\n");
                return 0;
            }
        }
    }

    //对角线
    temp = arr[0][0];
    if(arr[1][1] == temp && arr[2][2] == temp){
    
    
        if(temp == 'B'){
    
    
            printf("BoBo wins!\n");
            return 0;
        }else if(temp == 'K'){
    
    
            printf("KiKi wins!\n");
            return 0;
        }
    }
    temp = arr[0][2];
    if(arr[1][1] == temp && arr[2][0] == temp){
    
    
        if(temp == 'B'){
    
    
            printf("BoBo wins!\n");
            return 0;
        }else if(temp == 'K'){
    
    
            printf("KiKi wins!\n");
            return 0;
        }
    }
    printf("No winner!\n");
    return 0;
}

108、小乐乐与进制转换

题目描述

小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。

输入描述:

输入一个正整数n  (1 ≤ n ≤ 109)

输出描述:

输出一行,为正整数n表示为六进制的结果

输入

6

输出

10

输入

120

输出

320

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0,arr[10] = {
    
    0},index = 0;
    scanf("%d",&num);
    while(num){
    
    
        arr[index] = num % 6;
        num /= 6;
        index++;
    }
    for(int i = index-1;i>=0;i--){
    
    
        printf("%d",arr[i]);
    }
    return 0;
}

109、小乐乐求和

题目描述

小乐乐最近接触了求和符号Σ,他想计算img的结果。但是小乐乐很笨,请你帮助他解答。

输入描述:

输入一个正整数n  (1 ≤ n ≤ 109)

输出描述:

输出一个值,为求和结果。

输入

1

输出

1

输入

10

输出

55

解答

#include <stdio.h>
int main()
{
    
    
    long num = 0,sum = 0;
    scanf("%ld",&num);
    for(int i = 0; i <= num; i++){
    
    
        sum += i;
    }
    printf("%ld",sum);
    return 0;
}

110、小乐乐定闹钟

题目描述

小乐乐比较懒惰,他现在想睡觉,然后再去学习。他知道现在的时刻,以及自己要睡的时长,想设定一个闹钟叫他起床学习,但是他太笨了,不知道应该把闹钟设定在哪个时刻,请你帮助他。(只考虑时和分,不考虑日期)

输入描述:

输入现在的时刻以及要睡的时长k(单位:minute),中间用空格分开。输入格式:hour:minute k(如hour或minute的值为1,输入为1,而不是01)(0 ≤ hour ≤ 23,0 ≤ minute ≤ 59,1 ≤ k ≤ 109)

输出描述:

对于每组输入,输出闹钟应该设定的时刻,输出格式为标准时刻表示法(即时和分都是由两位表示,位数不够用前导0补齐)。

输入

0:0 100

输出

01:40

输入

1:0 200

输出

04:20

解答

#include <stdio.h>
int main()
{
    
    
    long hours = 0, minute = 0, sleepTime = 0;
    scanf("%ld:%ld %ld", &hours, &minute, &sleepTime);
    hours += sleepTime / 60;
    minute += sleepTime % 60;
    if (minute > 60) {
    
    
        hours++;
        minute -= 60;
        
    }
    if (hours > 23) {
    
    
        hours = hours % 24;
    }
    printf("%02ld:%02ld", hours, minute);
    return 0;
}

111、小乐乐排电梯

题目描述

小乐乐学校教学楼的电梯前排了很多人,他的前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助小乐乐计算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐到达楼上需要的时间。

输入

1

输出

2

输入

12

输出

6

解答

#include <stdio.h>
int main()
{
    
    
    int num = 0;
    scanf("%d",&num);
    printf("%d",(num / 12) * 4 + 2);
    return 0;
}

112、小乐乐与欧几里得

题目描述

小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。

输入描述:

每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)

输出描述:

对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

输入

10 20

输出

30

输入

15 20

输出

65

解答

#include <stdio.h>
int main()
{
    
    
    long num1 = 0,num2 = 0,a = 0,b = 0,t = 0,sum = 0;
    scanf("%d %d",&num1,&num2);
    if(num1 > num2){
    
    
        a = num1;
        b = num2;
    }else{
    
    
        a = num2;
        b = num1;
    }
    //辗转相除法,最后的a就是所求最大公约数
    while(b != 0){
    
    
        t = a % b;
        a = b;
        b = t;
    }
    sum = a + (num1 * num2) / a;
    printf("%ld",sum);
    return 0;
}

113、小乐乐改数字

题目描述

小乐乐喜欢数字,尤其喜欢0和1。他现在得到了一个数,想把每位的数变成0或1。如果某一位是奇数,就把它变成1,如果是偶数,那么就把它变成0。请你回答他最后得到的数是多少。

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即小乐乐修改后得到的数字。

输入

222222

输出

0

输入

123

输出

101

解答

#include <stdio.h>
int main()
{
    
    
    long num = 0;
    int arr[20],index = 0,status = 1;
    scanf("%ld",&num);
    while(num){
    
    
        if((num % 10) % 2 == 0){
    
    //偶数
            arr[index] = 0;
        }else if((num % 10) % 2 == 1){
    
    //奇数
            arr[index] = 1;
        }
        num/=10;
        index++;
    }
    index--;
    for(;index>=0;index--){
    
    
        if(status && arr[index] != 0){
    
    
            printf("%d",arr[index]);
            status = 0;
        }
        else if(status && arr[index] == 0){
    
    
            continue;
        }else if(!status){
    
    
            printf("%d",arr[index]);
        }
    }
    return 0;
}

114、小乐乐走台阶

题目描述

小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?

输入描述:

输入包含一个整数n (1 ≤ n ≤ 30)

输出描述:

输出一个整数,即小乐乐可以走的方法数。

输入

2

输出

2

输入

10

输出

89

解答

#include <stdio.h>
int main()
{
    
    
    int n = 0;
    scanf("%d",&n);
    //因为走到第三个楼梯的时候可以从第一阶和第二阶直接走上来;
    //同理,第四个楼梯的时候可以从第二阶和第三阶直接走上来;
    //第五个楼梯的时候可以从第三阶和第四阶直接走上来;
     if(n<4)
    {
    
    
        printf("%d",n);
        return 0;
    }
    else
    {
    
    
        int i=0;
        int arr[n+1];
        arr[2]=2;
        arr[3]=3;
        for(i=4;i<n+1;i++)
        {
    
    
            arr[i]=arr[i-1]+arr[i-2];
        }
        printf("%d",arr[i-1]);
        return 0;
    }
    return 0;
}

115、小乐乐与序列

题目描述

老师给了小乐乐一个正整数序列,要求小乐乐把这个序列去重后按从小到大排序。但是老师给出的序列太长了,小乐乐没办法耐心的去重并排序,请你帮助他。

输入描述:

第一行包含一个正整数n,表示老师给出的序列有n个数。接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n)

输出描述:

输出一行,为去重排序后的序列,每个数后面有一个空格。

输入

4
2
2
1
1

输出

1 2 

输入

5
5
4
3
2
1

输出

1 2 3 4 5 

解答

#include<stdio.h>
 
int main(){
    
    
    int n;
    scanf("%d",&n);
    int a[n],k;
    for(int i=0;i<n;i++){
    
    
        a[i]=0;
    }
    //骚操作,如果没有1 <= k <= n,这样就不行
    for(int i=0;i<n;i++){
    
    
        scanf("%d",&k);
        a[k-1]=k;
    }
    for(int i=0;i<n;i++){
    
    
        if(a[i]!=0)
            printf("%d ",a[i]);
    }
     
}

116、小乐乐与字符串

题目描述

在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串“CHN”的个数。

子串的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子串。如“ABC”的子串有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。

输入描述:

输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)

输出描述:

输出一个整数,为字符串s中字串“CHN”的数量。

输入

CCHNCHN

输出

7

输入

CCHNCHNCHNCHN

输出

30

解答

#include <stdio.h>
#include <string.h>
int main()
{
    
    
    char str[8000];
    gets(str);
    long long i,cnt_c=0,cnt_h=0,cnt_n=0;
    for(i=0;str[i]!='\0';i++){
    
    
        if(str[i]=='C') cnt_c++;
        else if(str[i]=='H') cnt_h+=cnt_c;
        else if(str[i]=='N') cnt_n+=cnt_h;
    }
    printf("%lld\n",cnt_n);
}

117、小乐乐算平均分

题目描述

小乐乐输入三科成绩,请编程帮他输出三科成绩总分及平均分。

输入描述:

一行,3科成绩(浮点数),成绩之间用一个空格隔开。

输出描述:

一行,总分和平均分(小数点后保留两位),用一个空格隔开。

输入

79.5 80.0 98.0

输出

257.50 85.83

解答

#include<stdio.h>
int main(){
    
    
    float a,b,c,sum,aver;
    scanf("%f%f%f",&a,&b,&c);
    sum=a+b+c;
    aver=sum/3.0;
    printf("%.2f %.2f",sum,aver);
    return 0;
}

118、小乐乐找最大数

题目描述

小乐乐获得4个最大数,请帮他编程找到最大的数。

输入描述:

一行,4个整数,用空格分开。

输出描述:

一行,一个整数,为输入的4个整数中最大的整数。

输入

5 8 2 5

输出

8

解答

#include<stdio.h>
int main()
{
    
    
    int a,b,c,d,max1,max2,max;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    max1 = a>=b?a:b;
    max2 = c>=d?c:d;
    if (max1 >= max2)
        printf("%d",max1);
    else if (max1 < max2)
        printf("%d",max2);
    return 0;
}

119、小乐乐是否被叫家长

题目描述

小乐乐的班级进行了一次期中考试,考试一共有3门科目:数学,语文,英语,小乐乐的班主任决定给没有通过考核的同学家长开一次家长会,考核的标准是三科平均分不低于60分,所以现在想请你帮忙算一算小乐乐会不会被叫家长。

输入描述:

一行,输入三个整数(表示小乐乐的数学、语文、英语的成绩),用空格分隔。

输出描述:

一行,如果小乐乐会被请家长则输出“YES”,否则输出“NO”。

输入

80 60 50

输出

NO

输入

70 55 40

输出

YES

解答

#include<stdio.h>
int main()
{
    
    
    int a,b,c,sum,temp;
    while(scanf("%d %d %d",&a,&b,&c)!=EOF)
    {
    
    
        sum=a+b+c;
        temp=sum/3;
        if(temp>=60) printf("NO\n");
        if(temp<60) printf("YES\n");
    }
    return 0;
}

120、小乐乐转换成绩

题目描述

小乐乐输入百分制成绩,他想将成绩转换成等级制。转换规则为:90-100为’A’,80-89为’B’,70-79为’C’,60-69为’D’,59以下为’E’。如果输入的成绩不在0-100之间,输出’F’。

输入描述:

一行,一个整数表示的成绩。

输出描述:

一行,转换后的等级。

输入

78

输出

C

解答

#include  <stdio.h>
int main()
{
    
    
    int s=0;
    scanf("%d",&s);
    if(s<=100&&s>=90){
    
    
        printf("A\n");
    }else if(s<=89&&s>=80){
    
    
         printf("B\n");
    }else if(s<=79&&s>=70){
    
    
         printf("C\n");
    }else if(s<=69&&s>=60){
    
    
        printf("D\n");
    }else if(s>100||s<0){
    
    
        printf("F\n");
    }else{
    
    
        printf("E\n");
    }
    return 0;
}

121、小乐乐算多少人被请家长

题目描述

小乐乐的班主任想统计一下班级里一共有多少人需要被请家长,三个成绩(语文,数学,外语)平均分低于60的将被请家长,小乐乐想编程帮助班主任算一下有多少同学被叫家长。

输入描述:

共n+1行
第一行,输入一个数n,代表小乐乐的班级中有n个同学。
在接下来的n行中每行输入三个整数代表班级中一个同学的三科成绩(语文,数学,外语),用空格分隔。

输出描述:

一行,一个整数,代表班级中需要被请家长的人数。

输入

3
80 100 90	
40 70 65
20 84 93

输出

1

解答

#include<stdio.h>
int main()
{
    
    
    int x,a,b,c,av,n=0;
    scanf("%d",&x);
    while(scanf("%d %d %d",&a,&b,&c)!=EOF)
    {
    
    
        getchar();
        if(a==0||b==0||c==0) continue;
        av = (a + b + c) / 3;
        if(av<60) n++;
    }
    printf("%d",n);
}

122、小乐乐算最高分

题目描述

小乐乐的老师BoBo想知道班级中谁的数学成绩最高,请编程帮他实现。

输入描述:

共n+1行
第一行输入一个数n,代表小乐乐的班级中n个同学。
第二行输入n个数,用空格相隔,代表班级中每个人的数学成绩。

输出描述:

一个整数,代表班级中最高的数学成绩。

输入

3
99 89 39

输出

99

解答

#include<stdio.h>
 
int main()
{
    
    
    int a,i,temp,result=0;
    scanf("%d",&a);
    for(i = 0; i < a; i++)
    {
    
    
        scanf("%d",&temp);
        if(temp > result)
            result = temp;
    }
    printf("%d",result);
    return 0;
}

123、小乐乐计算求和

题目描述

小乐乐想计算一下1!+2!+3!+…+n!。

输入描述:

一行,一个整数n。

输出描述:

一行,一个整数,表示1!+2!+3!+...+n!的结果。

输入

3

输出

9

备注:

结果范围在int类型范围之内

解答

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

124、小乐乐计算函数

题目描述

小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。

img

其中 max3函数为计算三个数的最大值,如: max3(1, 2, 3) 返回结果为3。

输入描述:

一行,输入三个整数,用空格隔开,分别表示a, b, c。

输出描述:

一行,一个浮点数,小数点保留2位,为计算后m的值。

输入

1 2 3

输出

0.30

解答

#include<stdio.h>

int max3(int a,int b,int c){
    
    
  int max=a;
  if(max<b)
	  max=b;
  if(max<c)
	  max=c;
  return max;
}


int main(){
    
    
    int a,b,c;
	double m;
    scanf("%d %d %d",&a,&b,&c);
    m=max3(a+b,b,c)*1.0/(max3(a,b+c,c)+max3(a,b,b+c));
   printf("%.2lf",m);

  return 0;
}

125、小乐乐查找数字

题目描述

给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。

输入描述:

共3行
第一行,一个整数,表示n(1 <= n <= 100)。
第二行,共输入n个整数,两个整数之间用空格分隔。
第三行,输入一个整数,表示要查找的整数x。

输出描述:

一行,表示整数x出现的次数。

输入

5
1 1 2 1 3
1

输出

3

解答

#include<stdio.h>
int main()
{
    
    
    int n,i,b;
    int a[101] = {
    
    0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    
    
        scanf("%d",&b);
        a[b]++;
    }
    scanf("%d",&i);
    printf("%d",a[i]);
    return 0;
}

126、KiKi学程序设计基础

题目描述

BoBo老师教了KiKi学习程序设计基础,他知道C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期KiKi学习了C和C++,学好他们,其他编程语言都可以很轻松掌握。C和C++的输入有区别,请帮KiKi输出C和C++输出Hello world的代码。

输入描述:

输出描述:

printf("Hello world!\n");
cout << "Hello world!" << endl;

解答

#include<stdio.h>
int main()
{
    
    
    printf("printf(\"Hello world!\\n\");\n");
    printf("cout << \"Hello world!\" << endl;");
}

127、KiKi算期末成绩

题目描述

KiKi这学期努力学习程序设计基础,要期末考试了,BoBo老师告诉他,总成绩包括四个部分,如下:

总成绩 = 实验成绩 * 20% + 课堂表现成绩 * 10% + 过程考核成绩 * 20% + 期末上机考试成绩 * 50%,现在输入KiKi的各项成绩,请计算KiKi的总成绩。

输入描述:

一行,包括四个整数(百分制),用空格分隔,分别表示实验成绩,课堂表现成绩,过程考核成绩,期末上机考试成绩。

输出描述:

一行,总成绩,保留小数点一位。

输入

100 100 90 80

输出

88.0

解答

#include  <stdio.h>
int main()
{
    
    
    int a,b,c,d;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    printf("%.1f\n",(a*0.2+b*0.1+c*0.2+d*0.5));
    return 0;
}

128、KiKi说祝福语

题目描述

2020年来到了,KiKi要对他的n位好朋友说n遍”Happy new year!Good luck!”的祝福语。

输入描述:

输入只有一行,其中含有一个正整数 n(1≤n≤20),代表KiKi说祝福话的遍数。

输出描述:

输出 n行"Happy new year!Good luck!"。

输入

2

输出

Happy new year!Good luck!
Happy new year!Good luck!

解答

#include<stdio.h>
int main()
{
    
    
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        printf("Happy new year!Good luck!\n");
    return 0;
}

129、KiKi的最高分

题目描述

KiKi知道了大一三科比较重要课程的分数,包括:程序设计基础,高数,英语,请编程帮他找到三科中的最高分。

输入描述:

一行,三个整数,用空格分隔,代表三科成绩。

输出描述:

一行,一个整数,代表输入三科分数中的最高分数。

输入

90 88 99

输出

99

解答

#include<stdio.h>
int main(){
    
    
    int a,b,c,sum;
    scanf("%d %d %d",&a,&b,&c);
    sum=a>b?a:b;
    sum=c>sum?c:sum;
    printf("%d",sum);
}

130、KiKi求质数个数

题目描述

KiKi知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。

输入描述:

输出描述:

一行,一个整数,表示所有三位整数中,有多少个质数。

解答

#include<stdio.h>
#include<math.h>
int main()
{
    
    
    int num = 0;
    for(int i = 100;i < 1000;i++){
    
    
        int flag = 0;
        for(int j = 2;j <= sqrt(i);j++){
    
    
            if(i % j == 0){
    
    
                flag = 1;
                break;
            }
        }
        if(flag == 0){
    
    
            num++;
        }
        else{
    
    
            flag = 0;
        }
    }
    printf("%d",num);
    return 0;
}

131、KiKi去重整数并排序

题目描述

给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到达排序输出。

输入描述:

第一行,输入一个整数n,表示序列有n个整数。
第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。

输出描述:

去重并且从小到大排列的整数序列,整数之间用空格分隔。

输入

6
5 3 3 4 2 2

输出

2 3 4 5

解答

//给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。
#include <stdio.h>
//第一行,输入一个整数n,表示序列有n个整数。
//第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。
int main()
{
    
    
    int n;
    //printf("请输入序列有几个整数:");
    scanf("%d",&n);
    int a[20];
    int t;
    for(int i=0;i<n;i++)
    {
    
    
        scanf("%d",&a[i]);
    }
    for(int i=0;i<n;i++)
    {
    
    
        for(int k=i+1;k<n;k++)
        {
    
    
            if(a[i]>a[k])
            {
    
    
                t=a[i];
                a[i]=a[k];
                a[k]=t;
            }
            if(a[k]==a[i]) a[i]=0;
        }
    }
    for(int i=0;i<n;i++)
    {
    
    
        if(a[i]!=0)
        printf("%d ",a[i]);
    }
}

132、KiKi判断上三角矩阵

题目描述

KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (2≤n≤10)从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述:

一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

输入

3
1 2 3
0 4 5
0 0 6

输出

YES

输入

4
1 2 3 4
5 6 7 8
9 0 11 12 
13 0 0 16

输出

NO

解答

#include<stdio.h>
int main()
{
    
    
    int a[10][10],i,j,n,m,l;
    scanf("%d",&n);
    for(i=0;i<n;i++){
    
    
        for(j=0;j<n;j++)
        {
    
    
            scanf("%d",&a[i][j]);
        }
    }
    m=0;
    for(i=0;i<n;i++){
    
    
        for(j=0;j<i;j++){
    
    
            if(a[i][j]!=0){
    
    
                m=1;
            }
        }
   }
    if(m==0){
    
    
        printf("YES");
    }
    else{
    
    
        printf("NO");
    }
    printf("\n");
}

133、KiKi学结构体和指针

题目描述

KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。

输入描述:

包括三行:
第一行输入数据个数n (3≤n≤100);第二行依次输入n个整数,用空格分隔;第三行输入欲删除数据m。

输出描述:

包括两行:
第一行输出完成删除后的单链表长度;第二行依次输出完成删除后的单链表数据。

输入

5
1 2 2 3 4
2

输出

3
1 3 4

解答

#include <stdio.h>
int main(){
    
    
    int n, m, a[110], count = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; i++) scanf("%d", &a[i]);
    scanf("%d", &m);
    for(int i = 0; i < n; i++) if(a[i] == m) count++;
    printf("%d\n", n-count);
    for(int i = 0; i < n; i++){
    
    
        if(a[i] != m) printf("%d ", a[i]);
    }
    return 0;
}

134、KiKi定义电子日历类

题目描述

KiKi学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。

它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求:

(1)带有默认形参值的构造函数,默认值为0, 0, 0;
(2)输出日期函数,用“日/月/年”格式输出日期;
(3)设置日期函数,从键盘输入年、月、日。

输入描述:

一行,三个整数,用空格分隔,分别表示年、月、日。

输出描述:

一行,用“日/月/年”格式输出日期。

输入

2019 12 30

输出

30/12/2019

解答

#include <stdio.h>
    void input(int *y,int *m,int *d){
    
    
        scanf("%d%d%d",y,m,d);
    }
    void output(int *y,int *m,int *d){
    
    
        printf("%d/%d/%d",*d,*m,*y);
    }
  
int main(){
    
    
    int d=0,m=0,y=0;
    input(&y,&m,&d);
    output(&y,&m,&d);
    return 0;
}

135、KiKi设计类继承

题目描述

KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点x,y, 由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。

输入描述:

输入三行,
第一行为矩形的长和宽,
第二行为圆的半径,
第三行为正方形的边长。

输出描述:

三行,分别是矩形、圆、正方形的面积。

输入

7 8
10
5

输出

56
314
25

解答

#include <stdio.h>
int main()
{
    
    
    int c,k,r,l;
    scanf("%d%d%d%d",&c,&k,&r,&l);
    printf("%d\n%g\n%d\n",c*k,r*r*3.14,l*l);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43509535/article/details/112105541