持续更新中…
Day1 2023.09.08
【入门1】顺序结构
具体题单
B2002 Hello,World!
题目描述
编写一个能够输出 Hello,World!
的程序。
提示:
- 使用英文标点符号;
Hello,World!
逗号后面没有空格。H
和W
为大写字母。
输入格式
输出格式
样例 #1
样例输入 #1
无
样例输出 #1
Hello,World!
#include<stdio.h>
int main(){
printf("Hello,World!");
return 0;
}
B2025 输出字符菱形
题目描述
用 *
构造一个对角线长
5
5
5 个字符,倾斜放置的菱形。
输入格式
没有输入要求。
输出格式
如样例所示。用 *
构成的菱形。
样例 #1
样例输入 #1
样例输出 #1
*
***
*****
***
*
#include<stdio.h>
int main(){
printf(
" *\n"
" ***\n"
"*****\n"
" ***\n"
" *\n");
return 0;
}
P1001 A+B Problem
题目描述
输入两个整数 a , b a, b a,b,输出它们的和( ∣ a ∣ , ∣ b ∣ ≤ 10 9 |a|,|b| \le {10}^9 ∣a∣,∣b∣≤109)。
注意
- Pascal 使用
integer
会爆掉哦! - 有负数哦!
- C/C++ 的 main 函数必须是
int
类型,而且 C 最后要return 0
。这不仅对洛谷其他题目有效,而且也是 NOIP/CSP/NOI 比赛的要求!
好吧,同志们,我们就从这一题开始,向着大牛的路进发。
任何一个伟大的思想,都有一个微不足道的开始。
输入格式
两个以空格分开的整数。
输出格式
一个整数。
样例 #1
样例输入 #1
20 30
样例输出 #1
50
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
return 0;
}
P5703【深基2.例5】苹果采购
题目描述
现在需要采购一些苹果,每名同学都可以分到固定数量的苹果,并且已经知道了同学的数量,请问需要采购多少个苹果?
输入格式
输入两个不超过 1 0 9 10^9 109 正整数,分别表示每人分到的数量和同学的人数。
输出格式
一个整数,表示答案。保证输入和答案都在 int 范围内的非负整数。
样例 #1
样例输入 #1
5 3
样例输出 #1
15
#include<stdio.h>
int main(){
//a为每人分到的数量 b为同学的人数
int a,b;
scanf("%d %d",&a,&b);
int sum; //需要购买的苹果数量
sum=a*b;
printf("%d",sum);
}
P5704【深基2.例6】字母转换
题目描述
输入一个小写字母,输出其对应的大写字母。例如输入 q[回车] 时,会输出 Q。
输入格式
输出格式
样例 #1
样例输入 #1
q
样例输出 #1
Q
#include<stdio.h>
int main(){
char a;
//输入一个小写字母
scanf("%c",&a);
//大小写字母间的ASCII码相差32
a=a-32;
//输出对应的大写字母
printf("%c",a);
return 0;
}
P5705【深基2.例7】数字反转
题目描述
输入一个不小于 100 100 100 且小于 1000 1000 1000,同时包括小数点后一位的一个浮点数,例如 123.4 123.4 123.4 ,要求把这个数字翻转过来,变成 4.321 4.321 4.321 并输出。
输入格式
一行一个浮点数
输出格式
一行一个浮点数
样例 #1
样例输入 #1
123.4
样例输出 #1
4.321
#include<stdio.h>
int main(){
float m;
float n; //翻转后的浮点数
//输入一个浮点数
scanf("%f",&m);
int a,b;
float c;
a=(int) (m*10); //转换为int型整数
b=a%10; //%求余,得到n的个位
c=a/1000/1000.0+//得到n的小数点后第3位
a/100%10/100.0+//得到n的小数点后第2位
a/10%10/10.0;//得到n的小数点后第1位
n=b+c;
//输出翻转后的浮点数
printf("%.3f",n); //保留3位小数
return 0;
}
P5706【深基2.例8】再分肥宅水
题目描述
现在有 t t t 毫升肥宅快乐水,要均分给 n n n 名同学。每名同学需要 2 2 2 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 3 3 3 位),以及一共需要多少个杯子。
输入格式
输入一个实数 t t t 和一个正整数 n n n,使用空格隔开。
输出格式
输出两行。
第一行输出一个三位小数,表示可以获得多少毫升饮料。第二行输出一个正整数,表示一共需要多少个杯子。
样例 #1
样例输入 #1
500.0 3
样例输出 #1
166.667
6
提示
对于所有数据, 0 ≤ t ≤ 10000 0\leq t\leq 10000 0≤t≤10000 且小数点后不超过 3 3 3 位, 1 ≤ n ≤ 1000 1\leq n\leq 1000 1≤n≤1000。
#include<stdio.h>
int main(){
int sum,n;//n名同学 sum为所需杯子的总数
double t,d;//t毫升可乐 d为每个同学获得的饮料
scanf("%lf %d",&t,&n);
sum=n*2;
d=t/n;
printf("%.3lf\n %d",d,sum);
return 0;
}
P5707【深基2.例12】上学迟到
题目描述
学校和 yyy 的家之间的距离为 s s s 米,而 yyy 以 v v v 米每分钟的速度匀速走向学校。
在上学的路上,yyy 还要额外花费 10 10 10 分钟的时间进行垃圾分类。
学校要求必须在上午 8:00 \textrm{8:00} 8:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。
由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。
输入格式
一行两个正整数 s , v s,v s,v,分别代表路程和速度。
输出格式
输出一个 24 24 24 小时制下的时间,代表 yyy 最晚的出发时间。
输出格式为 HH:MM \texttt{HH:MM} HH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 0 0 0。
样例 #1
样例输入 #1
100 99
样例输出 #1
07:48
提示
对于 100 % 100\% 100% 的数据, 1 ≤ s , v ≤ 1 0 4 1 \le s,v \le 10^4 1≤s,v≤104。
#include <stdio.h>
int main()
{
int s,v;//路程s 速度v
int h,m,t,x,y;//h小时 :m分钟 t为总时长(分钟)
scanf("%d %d",&s,&v);
//额外需要10分钟进行垃圾分类
if(s%v==0) t=s/v+10;
else t=s/v+11; //如果无法整除则需要多算一分钟
if(480-t<0) //如果所需时间大于8小时
{
x=1440+(480-t); //具体所需要多少分钟
h=x/60;
m=x%60;
}
else
{
y=480-t;
h=y/60;
m=y%60;
}
if(h<10)
{
if(m<10)
{
printf("0%d:0%d",h,m);
}
else
printf("0%d:%d",h,m);
}
else if(h>=10&&m<10) printf("%d:0%d",h,m);
else printf("%d:%d",h,m);
return 0;
}
B2029 大象喝水
题目描述
一只大象口渴了,要喝 20 20 20 升水才能解渴,但现在只有一个深 h h h 厘米,底面半径为 r r r 厘米的小圆桶 ( h h h 和 r r r 都是整数)。问大象至少要喝多少桶水才会解渴。
Update:数据更新,这里我们近似地取圆周率 π = 3.14 \pi = 3.14 π=3.14。
输入格式
输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深 h h h 和底面半径 r r r,单位都是厘米。
输出格式
输出一行,包含一个整数,表示大象至少要喝水的桶数。
样例 #1
样例输入 #1
23 11
样例输出 #1
3
提示
数据规模与约定
对于全部的测试点,保证 1 ≤ h ≤ 500 1 \leq h \leq 500 1≤h≤500, 1 ≤ r ≤ 100 1 \leq r \leq 100 1≤r≤100。
#include<stdio.h>
int main(){
//圆桶深h 底面半径r 单位cm 喝水总桶数sum
int h,r,sum;
scanf("%d %d",&h,&r);
//要喝20升水 即20000毫升水
//圆桶体积计算公式为 底面积PI *r*r 乘以高h
sum=20000/(3.14*r*r*h)+1;
printf("%d\n",sum);
return 0;
}
//注意该题对于时间与内存的限制!
P1425 小鱼的游泳时间
题目描述
伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。
这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按 24 24 24 小时制计算),它发现自己从 a a a 时 b b b 分一直游泳到当天的 c c c 时 d d d 分,请你帮小鱼计算一下,它这天一共游了多少时间呢?
小鱼游的好辛苦呀,你可不要算错了哦。
输入格式
一行内输入四个整数,以空格隔开,分别表示题目中的 a , b , c , d a, b, c, d a,b,c,d。
输出格式
一行内输出两个整数 e e e 和 f f f,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 f f f 应该小于 60 60 60。
样例 #1
样例输入 #1
12 50 19 10
样例输出 #1
6 20
提示
对于全部测试数据, 0 ≤ a , c ≤ 24 0\le a,c \le 24 0≤a,c≤24, 0 ≤ b , d ≤ 60 0\le b,d \le 60 0≤b,d≤60,且结束时间一定晚于开始时间。
#include<stdio.h>
int main(){
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
//从a时b分 游到 c时d分
int e,f;//e小时f分
if(d-b<0){
e=c-a-1;
f=60+(d-b);
} else{
e=c-a;
f=d-b;
}
printf("%d %d",e,f);
return 0;
}
P1421 小玉买文具
题目描述
班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 1 1 1 元 9 9 9 角,而班主任给小玉的钱是 a a a 元 b b b 角,小玉想知道,她最多能买多少只签字笔呢。
输入格式
输入只有一行两个整数,分别表示 a a a 和 b b b。
输出格式
输出一行一个整数,表示小玉最多能买多少只签字笔。
样例 #1
样例输入 #1
10 3
样例输出 #1
5
提示
数据规模与约定
对于全部的测试点,保证 0 ≤ a ≤ 1 0 4 0 \leq a \leq 10^4 0≤a≤104, 0 ≤ b ≤ 9 0 \leq b \leq 9 0≤b≤9。
#include<stdio.h>
int main(){
//一支笔1元9角
//a元b角 买sum只笔
int a,b,sum;
scanf("%d %d",&a,&b);
sum=(a*10+b)/19;
printf("%d",sum);
return 0;
}
P3954 [NOIP2017 普及组] 成绩
题目背景
NOIP2017 普及组 T1
题目描述
牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩$ \times 20%+ 小测成绩 小测成绩 小测成绩×30%+ 期末考试成绩 期末考试成绩 期末考试成绩 \times 50%$
牛牛想知道,这门课程自己最终能得到多少分。
输入格式
三个非负整数 A , B , C A,B,C A,B,C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是 100 100 100 分。
输出格式
一个整数,即牛牛这门课程的总成绩,满分也是 100 100 100 分。
样例 #1
样例输入 #1
100 100 80
样例输出 #1
90
样例 #2
样例输入 #2
60 90 80
样例输出 #2
79
提示
输入输出样例 1 说明
牛牛的作业成绩是 100 100 100 分,小测成绩是 100 100 100 分,期末考试成绩是 80 80 80 分,总成绩是 100 × 20 % + 100 × 30 % + 80 × 50 % = 20 + 30 + 40 = 90 100 \times 20\%+100 \times 30\%+80 \times 50\%=20+30+40=90 100×20%+100×30%+80×50%=20+30+40=90。
输入输出样例 2 说明
牛牛的作业成绩是 60 60 60 分,小测成绩是 90 90 90 分,期末考试成绩是 80 80 80 分,总成绩是 60 × 20 % + 90 × 30 % + 80 × 50 % = 12 + 27 + 40 = 79 60 \times 20\%+90 \times 30\%+80 \times 50\%=12+27+40=79 60×20%+90×30%+80×50%=12+27+40=79。
数据说明
对于 30 % 30\% 30% 的数据, A = B = 0 A=B=0 A=B=0。
对于另外 30 % 30\% 30% 的数据, A = B = 100 A=B=100 A=B=100。
对于 100 % 100\% 100% 的数据, 0 ≤ A , B , C ≤ 100 0≤A,B,C≤100 0≤A,B,C≤100 且 A , B , C A,B,C A,B,C 都是 10 10 10 的整数倍。
#include<stdio.h>
int main(){
//作业成绩A 小测成绩B 期末考试成绩C 总成绩sum
int A,B,C,sum;
scanf("%d %d %d",&A,&B,&C);
//总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%
sum=A*0.2+B*0.3+C*0.5;
printf("%d",sum);
return 0;
}
【入门2】分支结构
具体题单
P5709【深基2.习6】Apples Prologue / 苹果和虫子
题目描述
八尾勇喜欢吃苹果。她现在有 m m m( 1 ≤ m ≤ 100 1 \le m \le 100 1≤m≤100)个苹果,吃完一个苹果需要花费 t t t( 0 ≤ t ≤ 100 0 \le t \le 100 0≤t≤100)分钟,吃完一个后立刻开始吃下一个。现在时间过去了 s s s( 1 ≤ s ≤ 10000 1 \le s \le 10000 1≤s≤10000)分钟,请问她还有几个完整的苹果?
输入格式
输入三个非负整数表示 m , t , s m, t, s m,t,s。
输出格式
输出一个整数表示答案。
样例 #1
样例输入 #1
50 10 200
样例输出 #1
30
提示
如果你出现了 RE,不如检查一下被零除?
#include<stdio.h>
int main(){
//有m个苹果 吃一个要t分钟 时间过去s分钟 还剩a个苹果
int m,t,s,a;
scanf("%d %d %d",&m,&t,&s);
if(t==0) a=0; //一个都没吃
else if(m-s/t>0){
if(s%t==0) a=m-s/t;
else a=m-s/t-1; //有一个苹果吃了但没有吃完
}else{//苹果吃完了
a=0;
}
printf("%d",a);
return 0;
}
Day2 2023.09.11
【入门2】分支结构
具体题单
P5710 【深基3.例2】数的性质
题目描述
一些整数可能拥有以下的性质:
- 性质 1:是偶数;
- 性质 2:大于 4 4 4 且不大于 12 12 12。
小 A 喜欢这两个性质同时成立的整数;Uim 喜欢这至少符合其中一种性质的整数;八尾勇喜欢刚好有符合其中一个性质的整数;正妹喜欢不符合这两个性质的整数。现在给出一个整数 x x x,请问他们是否喜欢这个整数?
输入格式
输入一个整数 x ( 0 ≤ x ≤ 1000 ) x(0\le x \le 1000) x(0≤x≤1000)
输出格式
输出这
4
4
4 个人是否喜欢这个数字,如果喜欢则输出 1
,否则输出 0
,用空格分隔。输出顺序为:小 A、Uim、八尾勇、正妹。
样例 #1
样例输入 #1
12
样例输出 #1
1 1 0 0
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);//输入一个整数x
int a=0,b=0,c=0,d=0;//假定初始全为0
//性质 1:是偶数: x%2==0
//性质 2:大于4且不大于12: x>4 && x<13
//喜欢:1 不喜欢:0
//小 A 喜欢这两个性质同时成立的整数;
if((x%2==0) && (x>4 && x<=12)) a=1; //如果喜欢则改变值为1,不喜欢则不变
//Uim 喜欢这至少符合其中一种性质的整数;
if((x%2==0) || (x>4 && x<=12)) b=1;
//八尾勇喜欢刚好有符合其中一个性质的整数;
if(x%2==0&&x<=4&&x>12||x>4&&x<=12&&x%2!=0) c=1;
//正妹喜欢不符合这两个性质的整数
if((x%2!=0) && x<=4 || (x%2!=0) && x>12) d=1;
printf("%d %d %d %d",a,b,c,d);
return 0;
}
P5711【深基3.例3】闰年判断
题目描述
输入一个年份,判断这一年是否是闰年,如果是输出 1 1 1,否则输出 0 0 0。
输入格式
输入一个正整数 n n n,表示年份。
输出格式
输出一行。如果输入的年份是闰年则输出 1 1 1,否则输出 0 0 0。
样例 #1
样例输入 #1
1926
样例输出 #1
0
样例 #2
样例输入 #2
1900
样例输出 #2
0
样例 #3
样例输入 #3
2000
样例输出 #3
1
样例 #4
样例输入 #4
1996
样例输出 #4
1
提示
数据保证, 1582 ≤ n ≤ 2020 1582 \leq n \leq 2020 1582≤n≤2020 且年份为自然数。
#include<stdio.h>
int main(){
int y,x=0; //设初始值为非闰年,0
scanf("%d",&y);//输入一个年份
//能被4整除、但不能被100整除,或能被400整除的年份为闰年
if(y%4==0){//能被4整除
if(y%100!=0){//不能被100整除
x=1;//闰年
}else if(y%400==0){//或能被400整除
x=1;
}
}
printf("%d",x);
return 0;
}
P5712【深基3.例4】Apples
题目描述
八尾勇喜欢吃苹果。她今天吃掉了
x
x
x 个苹果。英语课上学到了 apple 这个词语,想用它来造句。如果她吃了 1 个苹果,就输出 Today, I ate 1 apple.
;如果她没有吃,那么就把 1 换成 0;如果她吃了不止一个苹果,别忘了 apple
这个单词后面要加上代表复数的 s
。你能帮她完成这个句子吗?
输入格式
输入一行一个自然数 x x x,表示吃掉的苹果数。
输出格式
根据题目要求输出。
样例 #1
样例输入 #1
1
样例输出 #1
Today, I ate 1 apple.
样例 #2
样例输入 #2
3
样例输出 #2
Today, I ate 3 apples.
提示
对于所有数据, 0 ≤ x ≤ 100 0\le x \le 100 0≤x≤100。
#include<stdio.h>
int main(){
int x;//吃掉的苹果树
scanf("%d",&x);
if(x==0 || x==1) printf("Today, I ate %d apple.",x);
else printf("Today, I ate %d apples.",x);
return 0;
}
Day3 2023.09.12
【入门2】分支结构
具体题单
P5713【深基3.例5】洛谷团队系统
题目描述
在洛谷上使用团队系统非常方便的添加自己的题目。如果在自己的电脑上配置题目和测试数据,每题需要花费时间
5
5
5 分钟;而在洛谷团队中上传私有题目,每题只需要花费
3
3
3 分钟,但是上传题目之前还需要一次性花费
11
11
11 分钟创建与配置团队。现在要配置
n
n
n 道题目,如果本地配置花费的总时间短,请输出 Local
,否则输出 Luogu
。
输入格式
输入一个正整数 n n n,表示需要配置的题目量。
输出格式
输出一行,一个字符串。如果本地配置花费的总时间短,请输出 Local
,否则输出 Luogu
。
样例 #1
样例输入 #1
2
样例输出 #1
Local
样例 #2
样例输入 #2
50
样例输出 #2
Luogu
提示
数据保证 1 ≤ n ≤ 100 1 \leq n\leq 100 1≤n≤100。
#include<stdio.h>
int main(){
int n;
scanf("%d",&n); //表示需要配置的题目量
int x,y; //x为本地配置 y为洛谷上传
x=5*n;
y=3*n+11;
if(x<y) printf("Local");
else printf("Luogu");
return 0;
}
P5714【深基3.例7】肥胖问题
题目描述
BMI 指数是国际上常用的衡量人体胖瘦程度的一个标准,其算法是 m h 2 \dfrac{m}{h^2} h2m,其中 m m m 是指体重(千克), h h h 是指身高(米)。不同体型范围与判定结果如下:
- 小于
18.5
18.5
18.5:体重过轻,输出
Underweight
; - 大于等于
18.5
18.5
18.5 且小于
24
24
24:正常体重,输出
Normal
; - 大于等于
24
24
24:肥胖,不仅要输出 BMI 值(使用
cout
的默认精度),然后换行,还要输出Overweight
;
现在给出体重和身高数据,需要根据 BMI 指数判断体型状态并输出对应的判断。
对于非 C++ 语言,在输出时,请四舍五入保留六位有效数字输出,如果小数部分存在后缀 0 0 0,不要输出后缀 0 0 0。
请注意,保留六位有效数字不是保留六位小数。例如 123.4567 123.4567 123.4567 应该输出为 123.457 123.457 123.457, 5432.10 5432.10 5432.10 应该输出为 5432.1 5432.1 5432.1。
输入格式
共一行。
第一行,共 2 2 2 个浮点数, m , h m, h m,h,分别表示体重(单位为 kg),身高(单位为 m)。
输出格式
输出一行一个字符串,表示根据 BMI 的对应判断。特别地,对于 Overweight
情况的特别处理请参照题目所述。
样例 #1
样例输入 #1
70 1.72
样例输出 #1
Normal
样例 #2
样例输入 #2
100 1.68
样例输出 #2
35.4308
Overweight
提示
对于所有数据, 40 ≤ m ≤ 120 40\le m \le 120 40≤m≤120, 1.4 ≤ h ≤ 2.0 1.4 \le h \le 2.0 1.4≤h≤2.0。 m m m 和 h h h 的小数点后不超过三位。
#include<stdio.h>
int main(){
double BMI;
double m,h;//m体重 h身高
scanf("%lf %lf",&m,&h);
BMI=m/(h*h);
if(BMI<18.5) printf("Underweight");
else if(BMI>=24) printf("%.6g\nOverweight",BMI);
//.6表示要保留小数点后6位,
//g表示根据数值大小自动选择以小数形式还是科学计数法形式进行输出
//%.6g可以将一个浮点数按照六位小数进行输出。
else printf("Normal");
return 0;
}
P5715 【深基3.例8】三位数排序
题目描述
给出三个整数 a , b , c ( 0 ≤ a , b , c ≤ 100 ) a,b,c(0\le a,b,c \le 100) a,b,c(0≤a,b,c≤100),要求把这三位整数从小到大排序。
输入格式
输入三个整数 a , b , c a,b,c a,b,c,以空格隔开。
输出格式
输出一行,三个整数,表示从小到大排序后的结果。
样例 #1
样例输入 #1
1 14 5
样例输出 #1
1 5 14
样例 #2
样例输入 #2
2 2 2
样例输出 #2
2 2 2
#include <stdio.h>
int main()
{
int a,b,c,t;
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("%d %d %d",a,b,c);
return 0;
}
P5716【深基3.例9】月份天数
题目描述
输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。
输入格式
输入两个正整数,分别表示年份 y y y 和月数 m m m,以空格隔开。
输出格式
输出一行一个正整数,表示这个月有多少天。
样例 #1
样例输入 #1
1926 8
样例输出 #1
31
样例 #2
样例输入 #2
2000 2
样例输出 #2
29
提示
数据保证 1583 ≤ y ≤ 2020 1583 \leq y \leq 2020 1583≤y≤2020, 1 ≤ m ≤ 12 1 \leq m \leq 12 1≤m≤12。
#include<stdio.h>
int main(){
int y,m;//月份m 年份y
scanf("%d %d",&y,&m);
if(m==2){//要分闰年与非闰年两种情况
if((y%4==0&&y%100!=0) || y%400==0){
printf("29\n");
}else{
printf("28\n");
}
}else if(m==8||m==1||m==3||m==5||m==7||m==10||m==12){
printf("31\n");
}else{
printf("30\n");
}
return 0;
}
P5715【深基3.习8】三角形分类
题目描述
给出三条线段 a , b , c a,b,c a,b,c 的长度,均是不大于 10000 10000 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?
- 如果三条线段不能组成一个三角形,输出
Not triangle
; - 如果是直角三角形,输出
Right triangle
; - 如果是锐角三角形,输出
Acute triangle
; - 如果是钝角三角形,输出
Obtuse triangle
; - 如果是等腰三角形,输出
Isosceles triangle
; - 如果是等边三角形,输出
Equilateral triangle
。
如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。
输入格式
输入 3 个整数 a a a、 b b b 和 c c c。
输出格式
输出若干行判定字符串。
样例 #1
样例输入 #1
3 3 3
样例输出 #1
Acute triangle
Isosceles triangle
Equilateral triangle
样例 #2
样例输入 #2
3 4 5
样例输出 #2
Right triangle
样例 #3
样例输入 #3
6 10 6
样例输出 #3
Obtuse triangle
Isosceles triangle
样例 #4
样例输入 #4
1 14 5
样例输出 #4
Not triangle
提示
当两短边的平方和大于一长边的平方,说明是锐角三角形。
当两短边的平方和等于一长边的平方,说明是直角三角形。
当两短边的平方和小于一长边的平方,说明是钝角三角形。
#include<stdio.h>
int main(){
int a,b,c,t;
scanf("%d %d %d",&a,&b,&c);
//先给a b c 排序,使其顺序为从小到大
if(a>b){
t=a;
a=b;
b=t;
}
if(a>c){
t=a;
a=c;
c=t;
}
if(b>c){
t=b;
b=c;
c=t;
}
if(a==0||b==0||c==0||a+b<=c){//不能组成三角形的条件 :任意两条边之和小于或等于第三条边
printf("Not triangle\n");}else{
if(a*a+b*b>c*c){//当两短边的平方和大于一长边的平方,说明是锐角三角形。
printf("Acute triangle\n");
}
if(a*a+b*b==c*c){//当两短边的平方和等于一长边的平方,说明是直角三角形。
printf("Right triangle\n");
}
if(a*a+b*b<c*c){//当两短边的平方和小于一长边的平方,说明是钝角三角形。
printf("Obtuse triangle\n");
}
if(a==b||b==c||c==a){
printf("Isosceles triangle\n");
}
if(a==b&&b==c){
printf("Equilateral triangle\n");
}
}
return 0;
}
P1888 三角函数
题目描述
输入一组勾股数 a , b , c ( a ≠ b ≠ c ) a,b,c(a\neq b\neq c) a,b,c(a=b=c),用分数格式输出其较小锐角的正弦值。(要求约分。)
输入格式
一行,包含三个正整数,即勾股数 a , b , c a,b,c a,b,c(无大小顺序)。
输出格式
一行,包含一个分数,即较小锐角的正弦值
样例 #1
样例输入 #1
3 5 4
样例输出 #1
3/5
提示
数据保证: a , b , c a,b,c a,b,c 为正整数且 ∈ [ 1 , 1 0 9 ] \in [1,10^9] ∈[1,109]。
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a<b)
{
int i=0;
i=a;
a=b;
b=i;
}
if(b<c)
{
int i=0;
i=b;
b=c;
c=i;
}
if(a<b)
{
int i=0;
i=a;
a=b;
b=i;
}
for(int i=2;i<=c;i++)
{
if((a%i==0)&&(c%i==0))
{
a=a/i;
c=c/i;
}
}
printf("%d/%d",c,a);
return 0;
}
P1046 [NOIP2005 普及组] 陶陶摘苹果
题目描述
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 10 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 30 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知 10 10 10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入格式
输入包括两行数据。第一行包含 10 10 10 个 100 100 100 到 200 200 200 之间(包括 100 100 100 和 200 200 200 )的整数(以厘米为单位)分别表示 10 10 10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100 100 100 到 120 120 120 之间(包含 100 100 100 和 120 120 120 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式
输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
样例 #1
样例输入 #1
100 200 150 140 129 134 167 198 200 111
110
样例输出 #1
5
提示
【题目来源】
NOIP 2005 普及组第一题
#include<stdio.h>
int main(){
int a[10];//10个苹果到地面的高度
int b; //手伸直后的最大高度
int i,j,n=0;//n为能摘到的苹果数目
for(i=0;i<=9;i++){
scanf("%d",&a[i]);//输入苹果高度
}
scanf("%d",&b);
for(j=0;j<=9;j++){
if(b+30>=a[j]||b>=a[j]){//能够到苹果的条件
n++;
}
}
printf("%d",n);
return 0;
}
P1424 小鱼的航程(改进版)
题目背景
题目描述
有一只小鱼,它平日每天游泳 250 250 250 公里,周末休息(实行双休日),假设从周 x x x 开始算起,过了 n n n 天以后,小鱼一共累计游泳了多少公里呢?
输入格式
输入两个正整数 x , n x,n x,n,表示从周 x x x 算起,经过 n n n 天。
输出格式
输出一个整数,表示小鱼累计游泳了多少公里。
样例 #1
样例输入 #1
3 10
样例输出 #1
2000
提示
数据保证, 1 ≤ x ≤ 7 1\le x \le 7 1≤x≤7, 1 ≤ n ≤ 1 0 6 1 \le n\le 10^6 1≤n≤106。
#include<stdio.h>
int main(){
int x,n,sum=0,i;//从周x算起 经过n天
scanf("%d %d",&x,&n);
for(i=1;i<=n;i++){
switch(x){
case 1:case 2:case 3:case 4:case 5:sum+=250;
case 6:x++; continue;
case 7:x=1; continue;
}
x++;
}
printf("%d",sum);
return 0;
}
P1422 小玉家的电费
题目描述
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电 [2006]27 号规定,月用电量在 150 150 150 千瓦时及以下部分按每千瓦时 0.4463 0.4463 0.4463 元执行,月用电量在 151 ∼ 400 151\sim 400 151∼400 千瓦时的部分按每千瓦时 0.4663 0.4663 0.4663 元执行,月用电量在 401 401 401 千瓦时及以上部分按每千瓦时 0.5663 0.5663 0.5663 元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
输入格式
输入一个正整数,表示用电总计(单位以千瓦时计),不超过 10000 10000 10000。
输出格式
输出一个数,保留到小数点后 1 1 1 位(单位以元计,保留到小数点后 1 1 1 位)。
样例 #1
样例输入 #1
267
样例输出 #1
121.5
#include<stdio.h>
int main(){
int x;//用电总计
scanf("%d",&x);
double sum;//电费
if(x<=150){
sum=x*0.4463;
}else if(x>401){
sum=(x-400)*0.5663+250*0.4663+150*0.4463;
}else{
sum=(x-150)*0.4663+150*0.4463;
}
printf("%.1lf",sum);
return 0;
}
P4414 [COCI2006-2007#2] ABC
题面翻译
【题目描述】
三个整数分别为 A , B , C A,B,C A,B,C。这三个数字不会按照这样的顺序给你,但它们始终满足条件: A < B < C A < B < C A<B<C。为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。
【输入格式】
第一行包含三个正整数 A , B , C A,B,C A,B,C,不一定是按这个顺序。这三个数字都小于或等于 100 100 100。第二行包含三个大写字母 A A A、 B B B 和 C C C(它们之间没有空格)表示所需的顺序。
【输出格式】
在一行中输出
A
A
A,
B
B
B 和
C
C
C,用一个
(空格)隔开。
感谢 @smartzzh 提供的翻译
题目描述
You will be given three integers A, B and C. The numbers will not be given in that exact order, but we do know that A is less than B and B less than C.
In order to make for a more pleasant viewing, we want to rearrange them in the given order.
输入格式
The first line contains three positive integers A, B and C, not necessarily in that order. All three numbers will be less than or equal to 100.
The second line contains three uppercase letters ‘A’, ‘B’ and ‘C’ (with no spaces between them) representing the desired order.
输出格式
Output the A, B and C in the desired order on a single line, separated by single spaces.
样例 #1
样例输入 #1
1 5 3
ABC
样例输出 #1
1 3 5
样例 #2
样例输入 #2
6 4 2
CAB
样例输出 #2
6 2 4
#include <stdio.h>
int main()
{
int a,b,c,t,i;
scanf("%d %d %d",&a,&b,&c);
char ch[5];
scanf("%s",ch);
//将abc调整至A<B<C的顺序
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
for(i=0;i<=3;i++)
{
if(ch[i]=='A') printf("%d ",a);
else if(ch[i]=='B') printf("%d ",b);
else if(ch[i]=='C') printf("%d ",c);
}
return 0;
}
Day4 2023.09.13
【入门2】分支结构
具体题单
P1909 [NOIP2016 普及组] 买铅笔
题目背景
NOIP2016 普及组 T1
题目描述
P 老师需要去商店买 n n n 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 3 3 3 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。
商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 n n n 支铅笔才够给小朋友们发礼物。
现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 n n n 支铅笔最少需要花费多少钱。
输入格式
第一行包含一个正整数 n n n,表示需要的铅笔数量。
接下来三行,每行用 2 2 2 个正整数描述一种包装的铅笔:其中第 1 1 1 个整数表示这种包装内铅笔的数量,第 2 2 2 个整数表示这种包装的价格。
保证所有的 7 7 7 个数都是不超过 10000 10000 10000 的正整数。
输出格式
1 1 1 个整数,表示 P 老师最少需要花费的钱。
样例 #1
样例输入 #1
57
2 2
50 30
30 27
样例输出 #1
54
样例 #2
样例输入 #2
9998
128 233
128 2333
128 666
样例输出 #2
18407
样例 #3
样例输入 #3
9999
101 1111
1 9999
1111 9999
样例输出 #3
89991
提示
铅笔的三种包装分别是:
- 2 2 2 支装,价格为 2 2 2;
- 50 50 50 支装,价格为 30 30 30;
- 30 30 30 支装,价格为 27 27 27。
P老师需要购买至少 57 57 57 支铅笔。
如果她选择购买第一种包装,那么她需要购买 29 29 29 份,共计 2 × 29 = 58 2 \times 29 = 58 2×29=58 支,需要花费的钱为 2 × 29 = 58 2 \times 29 = 58 2×29=58。
实际上,P 老师会选择购买第三种包装,这样需要买 2 2 2 份。虽然最后买到的铅笔数量更多了,为 30 × 2 = 60 30 \times 2 = 60 30×2=60 支,但花费却减少为 27 × 2 = 54 27 \times 2 = 54 27×2=54,比第一种少。
对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买 2 2 2 份,实际的花费达到了 30 × 2 = 60 30 \times 2 = 60 30×2=60,因此 P 老师也不会选择。
所以最后输出的答案是 54 54 54。
【数据范围】
保证所有的 7 7 7 个数都是不超过 10000 10000 10000 的正整数。
【子任务】
子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试只解决一部分测试数据。
每个测试点的数据规模及特点如下表:
上表中“整倍数”的意义为:若为 K K K,表示对应数据所需要的铅笔数量 n n n —定是每种包装铅笔数量的整倍数(这意味着一定可以不用多买铅笔)。
于 2022 年 12 月 23 日新加 Hack 数据三组。
#include <stdio.h>
int main()
{
int n,x1,y1,x2,y2,x3,y3,sum,s1,s2,s3;//x为数量y为价格
scanf("%d",&n);
scanf("%d %d",&x1,&y1);
scanf("%d %d",&x2,&y2);
scanf("%d %d",&x3,&y3);
if(n%x1==0) s1=(n/x1)*y1;
else s1=(n/x1+1)*y1;
if(n%x2==0) s2=(n/x2)*y2;
else s2=(n/x2+1)*y2;
if(n%x3==0) s3=(n/x3)*y3;
else s3=(n/x3+1)*y3;
if(s1<s2&&s1<s3) sum=s1;//取最省钱的方案,赋值给sum
if(s2<s1&&s2<s3) sum=s2;
if(s3<s2&&s3<s1) sum=s3;
printf("%d\n",sum);
return 0;
}
P1085 [NOIP2004 普及组] 不高兴的津津
题目描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入格式
输入包括 7 7 7 行数据,分别表示周一到周日的日程安排。每行包括两个小于 10 10 10 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出格式
一个数字。如果不会不高兴则输出 0 0 0,如果会则输出最不高兴的是周几(用 1 , 2 , 3 , 4 , 5 , 6 , 7 1, 2, 3, 4, 5, 6, 7 1,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
样例 #1
样例输入 #1
5 3
6 2
7 2
5 3
5 4
0 4
0 6
样例输出 #1
3
提示
NOIP2004 普及组第 1 题
- 2021-10-27:增加一组 hack 数据
- 2022-06-05:又增加一组 hack 数据
#include<stdio.h>
int main(){
int a,b,i;
int max=0;
int s=0;
for(i=0;i<7;++i){
scanf("%d %d",&a,&b);
if(a+b>max && a+b>8){
s=i+1;
max=a+b;
}
}
printf("%d",s);
return 0;
}
【入门3】循环结构
具体题单
P5718【深基4.例2】找最小值
题目描述
给出 n n n 和 n n n 个整数 a i a_i ai,求这 n n n 个整数中最小值是什么。
输入格式
第一行输入一个正整数 n n n,表示数字个数。
第二行输入 n n n 个非负整数,表示 a 1 , a 2 … a n a_1,a_2 \dots a_n a1,a2…an,以空格隔开。
输出格式
输出一个非负整数,表示这 n n n 个非负整数中的最小值。
样例 #1
样例输入 #1
8
1 9 2 6 0 8 1 7
样例输出 #1
0
提示
数据保证, n ≤ 100 n\le100 n≤100 且 0 ≤ a i ≤ 1000 0\le a_i \le 1000 0≤ai≤1000。
#include<stdio.h>
int main(){
int n,i,a[1000],min;//数字个数 n
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
min=a[0];
for(i=0;i<n;i++){
if(a[i]<min){
min=a[i];
}
}
printf("%d",min);
return 0;
}
P5719 【深基4.例3】分类平均
题目描述
给定 n n n 和 k k k,将从 1 到 n n n 之间的所有正整数可以分为两类:A 类数可以被 k k k 整除(也就是说是 k k k 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 1 1 位,用空格隔开。
数据保证两类数的个数都不会是 0 0 0。
输入格式
输入两个正整数 n n n 与 k k k。
输出格式
输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。
样例 #1
样例输入 #1
100 16
样例输出 #1
56.0 50.1
提示
数据保证, 1 ≤ n ≤ 10000 1 \leq n\leq 10000 1≤n≤10000, 1 ≤ k ≤ 100 1 \leq k \leq 100 1≤k≤100。
#include <stdio.h>
int main()
{
int n,k,i;
scanf("%d %d",&n,&k);
double s1,s2,x,y;
for(i=1;i<=n;i++)
{
if(i%k==0)
{
s1+=i;
x++;
}
else
{
s2+=i;
y++;
}
}
printf("%.1lf %.1lf",s1/x,s2/y);
return 0;
}