首先我在看到这套题的时候感觉很简单,但是实际上做起来坑的地方很多(谁让我是个菜鸡)。反正多了也不说了,下边附上这些题和AC代码。
B和D是本次比赛的签到题。CFGJ是中等难度的题。AEHI难度较高的题目。
Description
在这个硕果累累的秋天我校迎来了2018级的新同学。为了表示热烈的欢迎,打算在2号教学楼大厅的LED显示屏上显示“Welcome to HRBU College of Information Engineering“ 的字样。辅导员将这个任务派给了小明,可小明是真的不会,眼看新生即将到来你能帮助小明完成这个任务吗?
Input
无
Output
请在屏幕中显示“Welcome to HRBU College of Information Engineering”(无双引号)
AC代码:
#include
int main()
{
printf ("Welcome to HRBU College of Information Engineering\n");
}
Description
由于入学初辅导员派给自己的任务没有很好地完成,小明计划将C语言从头进行复习,他打算用90天时间复习完。假设今天(2018-11-03)是第一天,请问复习的最后一天是什么时候?
Input
无
Output
按照格式要求输出最后一天的日期,“XXXX年XX月XX日”(注意:包含前导0,无双引号)
AC代码:
#include
int main()
{
printf ("2019年01月31日\n");
}
Description
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间
Input
输入在一行中给出带有中间的“:”符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。
提示:在scanf的格式字符串中加入“:”,让scanf来处理这个冒号。
Output
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串“AM”或表示下午的字符串“PM”。如“5:6 PM”表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。
Sample Input
21:11
Sample Output
9:11 PM
AC代码:
#include
int main()
{
int a, b;
scanf ("%d:%d", &a, &b);
if (a == 12)
printf ("12:%d PM\n", b);
else if (a > 12 && a < 24)
printf ("%d:%d PM\n", a - 12, b);
else if(a == 24)
printf ("0:%d AM\n", b);
else
printf ("%d:%d AM\n", a, b);
}
Description
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
Input
输入在一行中给出1个不超过1000的正整数N
Output
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
Sample Input
103
Sample Output
Fishing in day 103
Sample Input 2
34
Sample Output 2
Drying in day 34
AC代码:
#include
int main()
{
int n;
scanf ("%d", &n);
if (n % 5 == 1 || n % 5 == 2 || n % 5 == 3)
printf ("Fishing in day %d\n", n);
else if (n % 5 == 4 || n % 5 == 0)
printf ("Drying in day %d\n", n);
}
Description
小明想知道在一组无序排列的数中最小的数是谁,请你帮助他完成任务
Input
输入正整数n,代表这一组中有多少个数(n不超过10000)
接下来一行输入n个整数
Output
输出其中最小的数并换行
AC代码:
#include
int main()
{
int n, a, min = 10001;
scanf ("%d", &n);
for (int i = 0; i < n; i++)
{
scanf ("%d", &a);
if (a < min)
min = a;
}
printf ("%d\n", min);
}
Description
要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”。
Input
输入在第1行中给出2个正整数N(<=20)和X,第2行给出N个整数。数字均不超过长整型,其间以空格分隔。
Output
在一行中输出X的位置,或者“Not Found”。
Sample Input
5 7
3 5 7 1 9
Sample Output
2
Sample Input 2
5 7
3 5 8 1 9
Sample Output 2
Not Found
AC代码:
#include
int main()
{
int n, x, a[21], flag = 0;
scanf ("%d%d", &n, &x);
for (int i = 0; i < n; i++)
scanf ("%d", &a[i]);
for (int i = 0; i < n; i++)
{
if (a[i] == x)
{
printf ("%d\n", i);
flag = 1;
break;
}
}
if (flag == 0)
printf ("Not Found\n");
}
Description
已知两个圆的圆心坐标O1,O2以及各自的半径r1,r2 小明数学很差请你告诉他这两个圆的状态
Input
第一行给出四个整数x1,y1,x2,y2,分别表示两个圆的圆心横坐标以及纵坐标(-1000<=x1,x2,y1,y2<=1000)
第二行给出两个正整数,分别表示两个圆的半径r1r2(1<=r1, r2<=1000)
Output
给出两个圆的状态(intersect【相交】,tangent【相切】,separation【相离】)若为同一个圆请输出“Sample circle”(输出无双引号)
Sample Input
1 1 2 2
1 1
Sample Output
intersect
Sample Input 2
1 1 1 1
1 1
Sample Output 2
Sample circle
Sample Input 3
1 1 3 1
1 1
Sample Output 3
tangent
AC代码:
#include
#include
#include
using namespace std;
int main()
{
int x1, x2, y1, y2, r1, r2;
scanf ("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &r1, &r2);
if (x1 == x2 && y1 == y2 && r1 == r2)
printf ("Sample circle\n");
else
{
double s2 = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
double s1 = r1 + r2;
if (s2 == s1 || s2 == abs(r1 - r2)) printf ("tangent\n");
else if (s1 > s2 && s2 > abs(r1 - r2)) printf ("intersect\n");
else printf ("separation\n");
}
}
Description
在课堂上,老师布置了一个任务,给出一个文件名,请根据文件的后缀名来确定程序是用什么语言编写的?
(规则如下:.java是java写的,.cpp是c++写的,*.c是c写的,如果不是这三种语言则输出none)。
比如a.cpp 说明使用c++编写的,b.c 说明使用c编写的,c.java 说明使用java编写的
Input
输入一个字符串,字符串长度不超过20。
字符串格式为s1.s2,字符串s1和s2均由小写字母构成,保证不为空串。
并且字符串只含字母和点号,不包含其他空白字符。
Output
根据文件名的后缀来确定是什么语言编写,如果是C语言编写的请输出“c”(无双引号);如果是C++语言编写的请输出“c++”(无双引号);如果是Java语言编写的请输出“java”(无双引号);如果不存在上述三种语言的后缀,则输出none。
Sample Input
a.cpp
Sample Output
c++
AC代码:
#include
#include
using namespace std;
int main()
{
int flag = 1;
string a;
while(cin >> a)
{
for (int i = 0; i < a.length(); i++)
{
if (a[i] == '.')
{
if (a[a.length() - 1] == 'c') cout << "c" << endl;
else if(a[a.length() - 1] == 'p' && a[a.length() - 2] == 'p' && a[a.length() - 3] == 'c') cout << "c++" << endl;
else if(a[a.length() - 1] == 'a' && a[a.length() - 2] == 'v' && a[a.length() - 3] == 'a' && a[a.length() - 4] == 'j') cout << "java" << endl;
else cout << "none" << endl;
flag = 1;
break;
}
else flag = 0;
}
if (flag == 0) cout << "none" << endl;
}
}
Description
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!
现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。
Input
输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。
Output
输出对应的十进制数
Sample Input
18
Sample Output
12
AC代码:
#include
int main()
{
int n;
scanf ("%d", &n);
printf ("%d\n", n % 16 + n / 16 * 10);
}
Description
猜数字游戏是令系统随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
Input
输入第一行中给出2个不超过100的正整数,分别是系统产生的随机数、以及猜测的最大次数N。随后每行给出一个用户的输入,直到出现负数为止。
Output
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
Sample Input
58 4
70
50
56
58
60
-2
Sample Output
Too big
Too small
Too small
Good Guess!
AC代码:
#include
#include
#include
using namespace std;
int main()
{
int a, n, x, flag = 0;
scanf ("%d%d", &a, &n);
for (int t = 1; t < 100; t++) {
scanf ("%d", &x);
if(x < 0 && t <= n) {
printf ("Game Over\n");
break;
}
else if (x >= 0) {
if (x > a && t <= n) printf ("Too big\n");
else if (x < a && t <= n) printf ("Too small\n");
else if (x == a && t <= n) {
flag = 1;
if (t == 1) {
printf ("Bingo!\n");
break;
}
else if (t == 2) {
printf ("Lucky You!\n");
break;
}
else if (t >= 3) {
printf ("Good Guess!\n");
break;
}
}
else if (flag == 0 && t > n) {
printf("Game Over\n");
break;
}
}
else if (t > n) {
if (flag == 0) {
printf ("Game Over\n");
break;
}
else break;
}
}
return 0;
}
此次比赛的所有题目均是原创,如果有转载等同学请标明出处。