文章目录
71. 挂科危险
-
问题描述:KiKi想知道这学期他的学习情况,BoBo老师告诉他这学期挂的科目累计的学分,根据所挂学分,判断KiKi学习情况,10分以上:很危险(Danger++),4~9分:危险(Danger),0 ~ 3:Good。
-
输入描述:一行,一个整数(0~30),表示KiKi挂的科目累计的学分。
-
输出描述:一行,根据输入的挂科学分,输出相应学习情况(Danger++,Danger,Good)。
-
示例1:
- 输入:14
- 输出:Danger++
-
示例2:
- 输入:9
- 输出:Danger
-
示例3:
- 输入:1
- 输出:Good
-
代码实现:
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a >= 10)
printf("Danger++\n");
else if (a >= 4 && a <= 9)
printf("Danger\n");
else
printf("Good\n");
return 0;
}
72. 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 HTTP;
while(scanf("%d",&HTTP) != EOF)
{
switch(HTTP)
{
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;
}
73. 数字三角形
-
问题描述:KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。
-
输入描述:多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。
-
输出描述:针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。
-
示例1:
输入:4
输出:
1
1 2
1 2 3
1 2 3 4
- 示例2:
输入:5
输出:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
- 代码实现:
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= i;j++)//i行就打印i列
{
printf("%d ",j);
}
putchar('\n');
}
}
return 0;
}
74. 公务员面试
- 问题描述:公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。
(注:本题有多组输入) - 输入描述:每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。
- 输出描述:每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。
- 示例:
- 输入:99 45 78 67 72 88 60
- 输出:73.00
- 解题思路:一边输入,一边求和,一边求最大最小值,最后求平均值。
- 代码实现:
#include <stdio.h>
int main()
{
float n[7];
while(scanf("%f %f %f %f %f %f %f",
&n[0],&n[1],&n[2],&n[3],&n[4],&n[5],&n[6]) != EOF)
{
int max = 0, min = 100, s = 0;
for(int i = 0; i < 7; i++)
{
if(n[i] > max)
max = n[i];
if(n[i] < min)
min = n[i];
s = s+n[i];
}
printf("%.2f\n", (s-max-min)/5.0);
}
return 0;
}
75. 有序序列插入一个数
-
问题描述:有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
-
输入描述:
-
第一行输入一个整数(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 n,i;
int arr[51] = {0};
int m;//要插入的数字
scanf("%d",&n);//输入个数
for(i = 0;i < n;i++)//输入有序的数字
{
scanf("%d",&arr[i]);
}
scanf("%d",&m);//输入要插入的数字
//从后往前一个一个的找,
//找到第一个比m小的数则将m放在它后面
for(i = n-1;i >= 0;i--)
{
if(m < arr[i])
{
arr[i + 1] = arr[i];//将比m大的数往后移动
}
else
{
arr[i + 1] = m;//插在比m小的数字后面
break;
}
}
if(i < 0)//数组中所有元素都比m大
{
arr[0] = m;//将m放到第一个位置
}
for(i = 0;i < n+1;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
76. 筛选法求素数
- 问题描述:用筛选法求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>
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
int i,arr[101];
for(i = 2;i <= n;i++)//将2到n之间的数存起来
{
arr[i] = i;
}
int j;
for(j = 2;j <= n;j++)//列举所有的除数:2~n
{
int k;
//用j之后的数来除j
for(k = j + 1;k <= n;k++)
{
//j之后的数 % j如果等于0,则将其置为0
if(0 == arr[k] % j)
{
arr[k] = 0;
}
}
}
int count = 0;
//输出并记录
for(i = 2;i <= n;i++)
{
if(arr[i] != 0)//这就是筛选出来的素数
{
printf("%d ",arr[i]);
}
else count++ ;
}
printf("\n%d\n",count);//在第二行打印被清零的数的个数
}
return 0;
}
77. 图像相似度
-
问题描述:给出两幅相同大小的黑白图像(用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>
int main()
{
int m,n;
int arr1[100][100] = {0};//m 和n最大取值都是100
int arr2[100][100] = {0};
int count = 0;//统计有多少个位置上的数相等
scanf("%d %d",&m,&n);
int i,j;
for(i = 0;i < m;i++)//m行
{
for(j = 0;j < n;j++)//n列
{
scanf("%d",&arr1[i][j]);
}
}
for(i = 0;i < m;i++)//m行
{
for(j = 0;j < n;j++)//n列
{
scanf("%d",&arr2[i][j]);
}
}
for(i = 0;i < m;i++)
{
for(j = 0;j < n;j++)
{
if(arr1[i][j] == arr2[i][j])
{
count++ ;
}
}
}
printf("%.2f\n",100.0 * count / (m * n));
return 0;
}
78. 登录验证
- 问题描述:有个软件系统登录的用户名和密码为(用户名:admin,密码:admin),用户输入用户名和密码,判断是否登录成功。
- 输入描述:多组测试数据,每行有两个用空格分开的字符串,第一个为用户名,第二个为密码。
- 输出描述:针对每组输入测试数据,输出为一行,一个字符串(“Login Success!”或“Login Fail!”)。
- 示例1:
- 输入:admin admin
- 输出:Login Success!
- 示例2:
- 输入:admin abc
- 输出:Login Fail!
- 代码实现:
#include <stdio.h>
#define MAX 100
#include <string.h>
int main()
{
char name[MAX];
char code[MAX];
while(scanf("%s %s",&name,&code) != EOF)
{
if(!strcmp(name,"admin") && !strcmp(code,"admin"))
{
printf("Login Success!\n");
}
else
{
printf("Login Fail!\n");
}
}
return 0;
}
79. 学好C++
-
问题描述:C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期你将学习C++,学好C++,其他编程语言都可以很轻松掌握。
-
输入描述:无
-
输出描述:I will learn C++ well!
-
代码实现:
//学好C++
#include<stdio.h>
int main()
{
printf("I will learn C++ well!\n");
return 0;
}
80. (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,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
printf("%d\n",(a + b- c) * d);
return 0;
}