2020软院算法组新生周练 - 第一周
A,折纸大佬的签到题
Problem Description
折纸大佬非常喜欢数学,一天折纸大佬看到了一个二元一次方程,折纸大佬对这个题目表示不屑,现在你能解出这个二元一次方程吗确保每组输入都为有解
Input
输入三个整数,表示二元一次方程$ax^2+bx+c=0$中的$a,b,c$,$(0<=a,b,c<=10)$Output
输出一行两个数字,表示解$x_{1},x_{2}$,(默认$x_{1}>x_{2}$),保留两位小数Sample Input
1 -2 1
Sample Output
1.00 1.00
注
请使用多组输入,即:#include<stdio.h> int main(void){ int a,b; while(~scanf("%d%d",&a,&b)){ printf("%d\n",a+b); } return 0; }
ps:求根号的函数为sqrt(double(n)),库函数为#include<math.h>
标程
#include<stdio.h> #include<math.h> int main(void){ int a,b,c; double x1,x2; while(~scanf("%d%d%d",&a,&b,&c)){ if(a==0){ x1=x2=-c/(double)b; } else{ x1=(-b+sqrt(b*b-4*a*c))/(double)(2*a); x2=(-b-sqrt(b*b-4*a*c))/(double)(2*a); } printf("%.2lf %.2lf\n",x1,x2); } return 0; }
B,千言学长的签到题
Problem Description
这才是真正的签到题,请输出"高飞学长天下无双"Input
没有输入Output
输出"高飞学长天下无双",注意不用换行Sample Input
Sample Output
高飞学长天下无双
标程
#include<stdio.h> int main(void){ printf("高飞学长天下无双"); return 0; }
C,高飞学长的签到题
Problem Description
高飞学长非常的强,强的让人五体投地,作为高飞学长的队友,不知天高地厚的千言学长想要挑战高飞学长,他们决定通过摸石子的游戏来决定胜负,
现在这里有个石子,高飞学长先手,可以取走个石子,千言学长也是如此,当谁没有石子可取时,就算谁落败,千言学长虽不及高飞学长,但也会选择最优的取石子方法,现在请你判断在这场游戏中谁会胜出。
Input
输入一行两个整数,$n,m(1<=n,m<=10000)$,表示一共有n个石子,m为单次取石头的上限Output
如果高飞学长胜出,请输出“高飞学长天下无双” 如果千言学长胜出,请输出“千言学长略胜一筹”Sample Input
5 2
3 2
Sample Output
高飞学长天下无双
千言学长略胜一筹
标程
#include<stdio.h> int main(void){ int n,m; while(~scanf("%d%d",&n,&m)){ if(n % (m+1) !=0) printf("高飞学长天下无双\n"); else printf("千言学长略胜一筹\n"); } return 0; }
D,hanhan学长的签到题
Problem Description
时间管理大师hanhan学长在同一天参加了两个活动,已知第一个和第二个活动的开始时间已经第一个活动的持续时间 现在憨憨学长想要知道是否能在第一个活动结束之后参加第二个活动,Input
输入有三行,第一二行都为三个数字,表示两个活动开始的时间,(小时,分钟,秒钟) 第三行为一个数字,表示第一个活动的持续时间,单位为秒 保证两个活动在同一天并且第一个活动比第二个活动早Output
若hanhan学长的第一个活动结束后能参与第二个活动(即在第二个活动开始前结束第一个活动),输出"YES",否则“NO” (友情提示:第一个活动结束的同时开启第二个活动也为输出“YES”)Sample Input
7 00 00
8 00 00
3599
Sample Output
YES
标程
#include<stdio.h> int main(void){ int x1,x2,x3,y1,y2,y3,cnt; int cnt1; while(~scanf("%d%d%d%d%d%d%d",&x1,&x2,&x3,&y1,&y2,&y3,&cnt)){ int sum=0; if(x3<=y3) sum+=y3-x3; else{ sum+=(60+y3)-x3; y2--; } if(x2<=y2) sum+=y2-x2; else{ sum+=((60+y2)-x2)*60; y1--; } sum+=(y1-x1)*3600; if(sum>=cnt) printf("YES\n"); else printf("NO\n"); } return 0; }
E,咕咕咕学长的签到题
Problem Description
咕咕咕学长在爬楼的的时候想到一个问题, 楼梯共有n格,咕咕咕学长可以一次爬1格,也 可以一次爬两格,咕咕咕学长想知道有多少种方式爬完楼梯。Input
输入一行一个整数$n(1<=n<=10)$,表示楼梯的格数Output
输出一行一个整数,表示爬完楼梯的方式数Sample Input
3
Sample Output
3
(提示: 1 1 1
1 2
2 1
三种情况,
再提示,爬三格可以分解在到达第三格时的前一个状态可以是位于第一格也可以是位于第二格(即向后退
一格或者两格),然后将两种情况相加就是爬到第三格的方式种数。
)
标称
#include<stdio.h> int main(void){ int n; int f[11]; while(~scanf("%d",&n)){ f[1]=1; f[2]=2; int i=2; for(i=3;i<=n;++i){ f[i]=f[i-1]+f[i-2]; } printf("%d\n",f[n]); } return 0; } -------------------------------------- #include <stdio.h> int main(void) { int n; while (~scanf("%d", &n)) { int a = 1, b = 2, c; for (int i = 3; i <= n; ++i) { c = a + b; a = b, b = c; } printf("%d\n", b); } return 0; }
F,bernard学长的签到题
Problem Description
bernard学长在一次外出时,看到墙上有五位数,bernard学长想要知道这五个数字倒过来输出是怎么 样,现在请你帮助bernard学长输出。Input
输入一行一个整数$n(10000<=n<=99999)$,表示bernard学长看到的数字Output
输出一行一个整数,表示倒过来的数字。Sample Input
12345
Sample Output
54321
标称
#include<stdio.h> int main(void){ int n,i; char s[5]; while(~scanf("%s",s)){ getchar(); for(i=4;i>=0;--i) printf("%c",s[i]); printf("\n"); } return 0; }
G,朝阳学长的签到题
Problem Description
朝阳学长在和bernard学长的一次外出中,bernard学长看到了墙上的数字,而朝阳学长注意到的是地上的的一个式子, $x=1^{3}+2^{3}+3^{3}....n^{3}$,现在,朝阳学长想要知道当n为一个值时,x为多少Input
输入一行一个整数$n(1<=n<=10)$Output
输出一行一个整数,表示xSample Input
1
2
Sample Output
1
9
标称
#include<stdio.h> int main(void){ int n,sum,i; while(~scanf("%d",&n)){ sum=0; for(i=1;i<=n;++i){ sum+=i*i*i; } printf("%d\n",sum); } return 0; }
H,Hamman学长的签到题
Problem Description
朝阳学长在和bernard学长都在认真解题时,Hamman学长出现了,Hamman学长想要打印一个三角形,三角形的样式由Hamman学长决定, Hamman学长想要朝阳学长在和bernard学长帮助他,但是他们都没有理Hamman学长,因此只能希望你能够帮助Hamman学长完成三角形 的答应。Input
输入有两行,第一行一个整数$n(1<=n<=10)$表示三角形的层数,第二行为一行字母,共有n个表示每一行使用到的字母Output
输出n行,表示一个三角形Sample Input
3
abc
Sample Output
a bbb ccccc
标称
#include<stdio.h> int main(void){ int i,j,k,n; char s[11]; while(~scanf("%d",&n)){ getchar(); for(i=1;i<=n;++i) scanf("%c",&s[i]); for(i=1;i<=n;++i){ for(j=n-i;j>0;--j) printf(" "); for(k=1;k<=2*i-1;++k) printf("%c",s[i]); printf("\n"); } } return 0; }