比赛名称: 星球杯实验室周测
比赛类型: 内部(受邀或输入密码才能参赛)
比赛状态: 已结束
比赛时间: 开始于 2021-10-16 14:00:00,至 2021-10-23 17:00:00结束。
# 2021届C语言第一次考核
[TOC]
## 注意
1. 本次考核共计八道题;
2. 考核时间长度为150分钟;
3. 考核总分为100分;
4. 最后将代码打包成压缩包,命名格式为学号\_班级\_姓名,如:202012345678_电子20-2\_龙傲天;
5. 代码命名格式为题目序号,如第一题的代码为:1.c;
6. 由于题目都是采取自动判题,故命名格式错误将直接视为0分;
7. 程序思路可以额外加分【需要申请】。
# 签到
## Hello ?
### 题目
星球杯实验室的在线评测系统出现了bug.
无法正常输出Hello World,而会变成Hello ?
### 输入
输入一个随机字符
### 输出
Hello 输入的字符
### 样例输入
```
?
```
### 样例输出
```
Hello ?
```
### 参考题解
```c
#include
int main(void){
char c;
scanf("%c",&c);
printf("Hello %c",c);
return 0;
}
```
# 基础
## 数数
### 题目
从零开始报数,直到数到N为止
### 输入
一个非零整数N
### 输出
0 1 2 3 …… N
### 样例输入
```
10
```
### 样例输出
```
0 1 2 3 4 5 7 8 9 10
```
### 参考题解
```c
#include
int main(void){
int N;
scanf("%d",&N);
for(int i = 0;i<=N;i++){
if(i)printf(" ");
printf("%d",i);
}
return 0;
}
```
## 简单の加法
### 题目
对于一个非负整数num做"加法运算"
所谓"加法运算"就是求这个数的每一位的和
### 输入
非负整数
### 输出
求出的和
### 样例输入
```
123
```
### 样例输出
```
6
```
### 参考题解
```c
#include
int main(void){
int num;
scanf("%d",&num);
int sum = 0;
while(num){
int digital = num%10;//digital = 3
num /= 10; // num = 12
sum += digital;
}
printf("%d",sum);
return 0;
}
```
## 太非数列
### 题目
**斐波那契数列**是指这样一个数列{0,1,1,2,3,5,8,13,21,34,……},从第三项开始每一项等于前两项的和
**泰波那契数列**是指这样一个数列{0,1,1,2,4,7,13,24,44,81,……},从第四项开始每一项等于前三项的和
而**太非数列**是前两者的结合,下面是他的运算规律:
{0,1,1,2,3,6,9,18,27,……}
从第三项开始,奇数项按照斐波那契数列计算 e.g.第三项是 1 = 0 + 1
从第四项开始,偶数项按照泰波那契数列计算 e.g.第四项是 2 = 0 + 1 + 1
现在给定一个非负整数N,请输出太非数列的第N项的值
### 输入
一个非负整数N
### 输出
一个int范围内的整数
### 样例输入
````
9
````
### 样例输出
```
27
```
### 参考题解
```c
#include
int main(void){
int N;
scanf("%d",&N);
if(N==1)printf("0");
if(N==2)printf("1");
if(N==3)printf("1");
int one = 0;
int two = 1;
int three = 1;
int four = 2;
for(int i=4;i<=N;i++){
if(i%2){//奇数
four = two + three;
one = two;
two = three;
three = four;
}else{//偶数
four = one + two + three;
one = two;
two = three;
three = four;
}
}
if(N>3)printf("%d",four);
return 0;
}
```
# 进阶
## 圣诞树
### 题目
用*打印一颗圣诞树
### 输入
圣诞树节数(也是树干的高度)
### 输出
圣诞树的图案
### 样例输入
```
3
```
### 样例输出
```
*
***
*
***
*****
*
***
*****
*******
*
*
*
```
### 参考题解
```c
#include
int main(void){
int N;
scanf("%d",&N);
//打印树叶
for(int i=1;i<=N;i++){
//打印每一节树叶
for(int j=1;j<=i+1;j++){
//对称空格
for(int k=1;k<=N-i;k++){
printf(" ");
}
//树叶空格
for(int k=1;k<=i-j+1;k++){
printf(" ");
}
//打印每一节树叶的本体
for(int k=1;k<=j*2-1;k++){
printf("*");
}
printf("\n");
}
}
//打印树干
for(int i=1;i<=N;i++){
//树干对齐空格
for(int i=1;i<=N;i++){
printf(" ");
}
//树干本体
printf("*\n");
}
return 0;
}
```
## 买鸡郎
### 题目
小灰灰听闻了百钱百鸡的问题后,日有所思夜有所梦,决定亲身去买一次鸡,但是他不想局限在百钱百鸡上,他想通过自己规定固定数量的鸡和固定数量的钱来查看有多少种解决方案。
### 输入
输入鸡的数量和买鸡所花的钱,中间以空格分割。
鸡的数量不多于2\^30只,钱的数量不多于2\^30元。
### 输出
每行输出三个数,依次是公鸡、母鸡以及小鸡的数量,最后一行输出方案的总数。
### 样例输入
```
200 150
```
### 样例输出
```
3 26 171
7 19 174
11 12 177
15 5 180
4
```
### 参考题解
```c
#include
int main(void){
int num,money;
scanf("%d %d",&num,&money);
int cock, hen, chicken;
int count = 0;
for(cock = 0; 5*cock <= money; cock++){
for(hen = 0; 3*hen <= money-cock*5; hen++){
chicken = 3 * (money-cock*5-hen*3);
if(cock + hen + chicken == num){
printf("%d %d %d\n", cock, hen, chicken);
count ++;
}
}
}
printf("%d",count);
return 0;
}
```
## 考核成绩导入
### 题目
实验室的考试成绩最后需要有一个转换机制,一共有三次考核,规则如下:
1. 考核总分占比为:第一次20%, 第二次30%,最后一次50%;
2. 第一次考核不到五十分的将会直接失去资格,评价为D等;
3. 第二次考核不到五十分,或当时累计成绩不足30分,也会失去资格,评价为C;
4. 最后一次考核不足三十分,或累计分值不足50分,将失去资格,评价为B;
5. 累计总分在50-70分,评价为A;
6. 累计总分在70分以上,评价为S;
### 输入
三次考核的成绩,三次成绩随机,如果前一次考核未通过,之后考核成绩不予考虑。
### 输出
他们的累计分值与评价。累计分值保留两位小数。
### 样例输入
```
75 92 80
```
### 样例输出
```
82.60 S
```
### 参考题解
```c
#include
int main(void){
double n1,n2,n3;
scanf("%lf %lf %lf",&n1,&n2,&n3);
if(n1<50){
printf("%.2lf D",n1*0.2);
}else{
if(n2<50||n1*0.2+n2*0.3<30){
printf("%.2lf C",n1*0.2+n2*0.3);
}else if(n3<30||n1*0.2+n2*0.3+n3*0.5<50){
printf("%.2lf B",n1*0.2+n2*0.3+n3*0.5);
}else if(n1*0.2+n2*0.3+n3*0.5<70){
printf("%.2lf A",n1*0.2+n2*0.3+n3*0.5);
}else{
printf("%.2lf S",n1*0.2+n2*0.3+n3*0.5);
}
}
return 0;
}
```