A 萌新签到
题目描述
欢迎大家来参加2022洛阳师范学院ACM实验室新生赛,我们实验室全体学长学姐从暑假一直期盼着你们的到来。
我们的小萌新那么可爱,学长学姐肯定不会为难大家呀!
这一题非常简单,你只需要输出"LYNUACM"就可以了。
输入描述:
无
输出描述:
LYNUACM
思路&代码
考察printf
的简单使用
#include <stdio.h>
int main()
{
printf("LYNUACM");
return 0;
}
B 成为一个会a+b的大佬
题目描述
计算a+b
输入描述:
第一行输入一个数据组数n
接下来n行每行输入两个整数
输出描述:
对于每组数据计算a+b的值
输入
2
1 1
2 2
输出
2
4
思路&代码
有n组数据, 且组数已经给出。
因为n是输入时读进来的, 无法在代码中设一个固定值:
// 错误代码
int main()
{
int n, a, b;
scanf("%d", &n);
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}
这种只能过个示例, 而提交后对你程序进行测试时的数据n就不一定是2了。
所以这里需要用到适合确定循环次数时的循环, 即for
语句。
for ( init; condition; increment )
{
statement(s);
}
// init为定义语句, 会被首先执行且只执行一次, 定义循环控制变量
// 第二步会判断 condition 条件语句, 如果满足则继续向下, 不满足则退出循环
// 第三步当且仅当第二步满足时, 执行statement(s)的语句。
// 第四部执行 increment 语句, 对循环控制变量进行更新
故正解代码为:
#include <stdio.h>
int main(void)
{
int n,a,b;
scanf("%d", &n);
for(int i = 1; i <= n; i++) // 写成 for(int i = 0; i < n; i++) 在这里都是循环n次
{
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
}
return 0;
}
C 伏特加+小可可乐
题目描述
计算a+b
输入描述:
多组数据,每组输入两个整数,当两个整数都为0时表示输入结束
输出描述:
对于每组数据输出两个整数的和
示例1
输入
1 1
2 2
0 0
输出
2
4
思路&代码
这次没说有多少组循环, 即不定次循环问题。
在c/c++语言中, 有一个用来判断输入流是否结束的标识符 EOF(end-of-file), 而 scanf 函数本身就有返回值, 默认其值是 成功输入的数量, 若输入结束则返回EOF, 故我们可以根据这个特性来判断什么时候结束循环。
while(condition)
{
statement(s);
}
// 第一次进入while时, 先判断 condition, 如果成立再执行循环体
// 执行完循环体后, 再进行判断 condition, 之后重复操
故可以设计出一下的代码:
while(1 == 1) // 1==1 是恒成立的, 故循环只要不主动结束就会一直循环, 称死循环
{
int flag = scanf("%d", &n);
if(flag == EOF) // 或者 flag == 1
break; // 强制结束循环
}
但这个太丑了, 来优化一下:
while(scanf("%d", &n) == EOF) // 或者 == 1
{
//...
}
//同理, 程序会执行condition的语句, 获取其返回值, 若 == 成立则返回1, 可以继续, 若==不成立则返回0, 结束循环
最终代码为:
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d %d", &a, &b) != EOF && (a || b))
printf("%d\n", a +b);
return 0;
}
D 艺博学长的a+b
题目描述
艺博学长来到瓜摊买瓜, 老板把瓜一称, 十百块一斤, 艺博学长感觉不对劲, 怀疑瓜皮是金子做的, 但想了想还是买了。
随后来到银行取钱壹佰块, 发现余额不足。
不禁发问:银行是不是已经破产了,为什么我每次取钱都显示余额不足?
但还是要有这壹佰块, 于是学长跟别人打赌自己能一秒算出所有实数相加, 为了必胜, 学长请你来帮他算算, 作为对照。
这道题就是求两个正实数相加(艺博学姐保证没有负数,全部都是正实数)。
输入描述:
在一行中输入两个数据A和B,中间以空格分隔
输出描述:
输出两个数相加的结果
输入
10.01 23
输出
33.01
输入
10.1 5
输出
15.1
思路&代码
浮点数相加就用浮点数类型的变量来存放。
这里用 floa
或者 double
都可
#include <stdio.h>
int main()
{
float a,b;
while(~scanf("%f %f", &a, &b))
printf("%f\n", a + b);
return 0;
}
E 乐子人转换成绩
题目描述
小乐乐输入百分制成绩,他想将成绩转换成等级制。转换规则为:90-100为’A’,80-89为’B’,70-79为’C’,60-69为’D’,59以下为’E’。如果输入的成绩不在0-100之间,输出’F’。
输入描述:
一行,一个整数表示的成绩。
输出描述:
一行,转换后的等级。
示例1
输入
78
输出
C
思路&代码
输入一个数判断大小, 直接用if堆出来就行
#include <stdio.h>
int main ()
{
int n;
scanf("%d",&n);
if(n>=90&&n<=100)
printf("A");
else if(n>=80&&n<=89)
printf("B");
else if(n>=70&&n<=79)
printf("C");
else if(n>=60&&n<=69)
printf("D");
else if(n>=0&&n<=59)
printf("E");
else
printf("F");
return 0;
}
注意条件设置, 尽量简洁优雅, 这种模拟题最忌讳混乱的码风, 非常容易出错。
下面介绍另一种方法:
显然每个区间都有一个特性, 90-100的属于A, 80-89的属于B, 70-79的属于C, 那么除了A区间, BCD的成绩都十位上的数不变。
可以使用switch
语句来写:
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
if(n < 0 || n > 100)
printf("F\n");
else
{
switch(n / 10)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
break;
}
}
return 0;
}
F 白马!定叫他有来无回
题目描述
假如你是李华,你刚得知你的朋友界徐盛(Jie Xusheng)犯了蜀国疆土,被谋黄忠(Mou Huangzhong)万军取首了。对此你和你的同学们都感到很难过,现在同学们决定让你代表他们给界徐盛写一封慰问信。信的内容如下:
1.所有同学对他都表示同情,打算星期五下午派你为代表去看望他并给他带去他喜欢古锭刀;
2.告诉他谋黄忠的体验期已经过了,让他不要再担心;如果他有什么需要你们做的事情,请他告知;
3.希望他作为时代的眼泪不要过于悲伤,祝愿他早日恢复。
但同学突然想起来时空邮局有个活动, 如果今年是闰年就可以免费送信。
其他人都不想拿出手机百度搜一下, 所以就由你来做了:
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
-
年份是4的倍数而不是100的倍数;
-
年份是400的倍数。
其他的年份都不是闰年。
输入描述:
输入包含一个整数x,表示当前的年份。
输出描述:
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
输入
2021
输出
no
输入
2008
输出
yes
备注:
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
思路&代码
判断一个数a是不是数b的倍数, 使用取余运算, 如果 a % b == 0
说明 a 可以被 b整除, 说明b可以通过乘上一个数变成a, 那么a就是b的倍数。
条件判断的且运算符是 &&, 或运算符是 ||
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
if((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0))
printf("yes\n");
else
printf("no\n");
return 0;
}
G 三角形判断
题目描述
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!
思路&代码
更复杂一些的判断
根据你扎实的高中数学基础, 应该能一眼看出来, 等边三角形是等腰三角形的子集, 等腰三角形是三角形的子集, 三角形是图形的子集。
因此, 我们要先判断是否为三角形, 再判断是是否为等边, 最后否为等腰。
假设三角形三个边为 a,b,c。
等边很简单 a==b && b==c
即可
等腰则 a==b || b==c || a==c
是否为三角形则用一条定理 a + b > c
来判断, 任意两边之和大于第三边
#include<stdio.h>
int main()
{
int a, b, c;
while(~scanf("%d %d %d", &a, &b, &c))
{
if(a + b > c && b + c > a && a + c > b)
{
if(a == b && b == c)
printf("Equilateral triangle!\n");
else if(a == b ||b == c || a == c)
printf("Isosceles triangle!\n");
else
printf("Ordinary triangle!\n");
}
else
printf("Not a triangle!\n");
}
return 0;
}
H 玩物丧志
题目描述
这几天恰逢 守望先锋:归来 开服, 栋宇学长作为老玩家肯定不会缺席, 谁知道一玩就上瘾。 这不, 已经忘了怎么把一个乱序数组排序了。 聪明的你一定知道怎么做, 来帮帮学长吧!
输入描述:
每个测试用例第一行一个整数 N(1<=N<=1000 要排序的整数数)
然后第二行中有 N 个整数。
输出描述:
打印排序结果
示例1
输入
8
6 4 5 7 1 2 9 3
输出
1 2 3 4 5 6 7 9
思路&代码
如何将一个数组排成有序递增数组?
我们有很多方法可以选, 冒泡, 选择, 插入, 快排, 归并等等。
这里用最基础的冒泡即可。
建议看视频更好理解冒泡排序法_哔哩哔哩_bilibili
#include <stdio.h>
#define N 1010
int a[N];
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
for(int i = 0; i < n - 1; i ++)
{
for(int j = 0; j < n - i - 1; j++)
if(a[j] > a[j + 1])
{
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
for(int i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
如果你会C++, 那么这题更简单:
#include <iostream>
#include<algorithm>
using namespace std;
const int N = 1100;
int a[N];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n;i ++) cin >>a[i];
sort(a, a +n);
for(int i = 0; i < n;i ++) cout <<a[i] <<" ";
return 0;
}
这就是为啥大家都用c++(
I 国庆节
题目描述
“你说得对,但是《国庆节》是当代大学制作发行的一款开放世界冒险游戏,游戏发生在一个被称作“大学校园”的幻想世界,在这里,被神选中的人将被授予“两天节假日”,导引调休之力。玩家将扮演一位名为“大院种”的神秘角色,在自由的旅行中邂逅阉割假期、灵活调休的领导们,和他们一起击败强敌,找回失去的节假日——同时,逐步发掘“纳入寒假”的真相。“
这是一个大学学生发表的评论。
但和你有什么关系呢?洛师放假7天且还可以出去校园呢。你想到。
还是来做道题吧, 嘻嘻。
该任务是打印用“*”组成的直角三角形图案。
输入描述:
多组输入,输入一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。
输入
4
输出
*
* *
* * *
* * * *
输入
5
输出
*
* *
* * *
* * * *
* * * * *
备注:
文豪学长的小提示:这一题是多组输入呦,你们会多组输入吗?
如果你参加了2022ACM的暑假训练,你肯定知道,在暑假训练里的第一个问题就是多组输入呦。嘿嘿
标签:10,招新,输出,int,scanf,ACM,printf,竞赛题,输入 From: https://www.cnblogs.com/edwinaze/p/16769845.html