上图是 10m 气手枪靶纸。10 环的直径为 11.5mm,9 环的直径为 27.5mm,8 环的直径为 43.5mm。7~10 环区为黑色,直径为 59.5mm,外环直径为 155.5mm。1~6 环区直径差均为常数。
当所有环线标记都被擦除,你还能否判断成绩?
输入在一行中给出一个选手射击的点到靶心的直线距离,以微米(10−3毫米)为单位。
根据输入的距离,输出该选手得到的环值。注意:脱靶计 0 分。
13100
9
29750
7
78000
0
思路:很简单的方法是用if语句单个判断,需要注意的是要题中给的是直径不是半径,而题中要求输入的数是半径。
参考代码:
#include
int main()
{
int length; //距离圆心的距离
int d=(155500-59500)/6; //1~6环的等距(在判断时要除以2)
scanf("%d",&length);
if(length>=0&&length<=11500/2) //10环,判断时记得除以2
printf("10\n");
else if(length>11500/2&&length<=27500/2) //9话
printf("9\n");
else if(length>27500/2&&length<=43500/2) //8环
printf("8\n");
else if(length>43500/2&&length<=59500/2) //7环
printf("7\n");
else if(length>59500/2&&length<=(59500+d)/2) //6环
printf("6\n");
else if(length>(59500+d)/2&&length<=(59500+2*d)/2) //5环
printf("5\n");
else if(length>(59500+2*d)/2&&length<=(59500+3*d)/2) //4环
printf("4\n");
else if(length>(59500+3*d)/2&&length<=(59500+4*d)/2) //3环
printf("3\n");
else if(length>(59500+4*d)/2&&length<=(59500+5*d)/2) //2环
printf("2\n");
else if(length>(59500+5*d)/2&&length<=(59500+6*d)/2) //1环
printf("1\n");
else //脱靶
printf("0\n");
return 0;
}
“教育超市”是拼题 A 系统的一个衍生产品,发布了各种试卷和练习供用户选购。在试卷列表中,系统不仅列出了每份试卷的单价,还显示了当前的购买人次。本题就请你根据这些信息计算教育超市所有试卷的总销量(即购买人次的总和)和销售额。
输入首先在第一行中给出一个正整数 N(≤100),随后 N 行,每行给出一份卷子的单价(为不超过 100 的正整数)和购买人次(为不超过 104的非负整数)。
在一行中输出总销量和总销售额,其间以一个空格分隔。
4
39 10
19 38
9 332
95 7
387 4765
思路:……看代码吧
参考代码:
#include
int main()
{
int n,a,b;
int cnt_money=0,cnt=0; //总销售额,总销售量
scanf("%d",&n); //每种试卷
for(int i=0;i<n;i++){ //循环n次
scanf("%d%d",&a,&b); //输入单价和数量
cnt+=b; //总销售量
cnt_money+=a*b; //总销售额
}
printf("%d %d\n",cnt,cnt_money);
return 0;
}
本题请你实现一个简单的投票统计工具:投票同意的人输入 1,反对的人输入 0。简单多数胜。
输入在一行中给出一系列的投票值,1 表示同意,0 表示反对,-1 表示结束。
统计并输出投票的结果:如果同意的人多就输出 Yes;反对的人多就输出 No;平票就输出 Tie。然后在第二行输出同意的人数和反对的人数,其间隔 1 个冒号 :。
1 0 0 1 1 -1
Yes
3:2
0 0 0 1 -1
No
1:3
1 1 1 0 0 0 -1
Tie
3:3
思路:定义一个数组a[2]用来存放投票,a[0]表示反对,a[1]表示同意,要记得对数组进行初始化,如果投票是0则a[0]++,如果是1则a[1]++,-1则退出。
参考代码:
#include
int main()
{
int a[2]={0},x; //初始化a
while(1){ //循环输入
scanf("%d",&x); //投票
if(x==-1) break; //-1退出
a[x]++;
}
if(a[0]>a[1]) //反对
printf("No\n%d:%d\n",a[1],a[0]);
else if(a[1]>a[0]) //同意
printf("Yes\n%d:%d\n",a[1],a[0]);
else //平
printf("Tie\n%d:%d\n",a[1],a[0]);
return 0;
}
本题要求你写一个程序帮助不懂英文的用户翻译月份。已知英文的 12 个月份为:
一月:January
二月:February
三月:March
四月:April
五月:May
六月:June
七月:July
八月:August
九月:September
十月:October
十一月:November
十二月:December
输入包括若干行,每一行里给出一个英文单词,长度不超过 10 个英文字母。
对每一行的输入,如果该单词是一个英文的月份(不区分大小写),则在一行中输出这个月份对应的数字;否则输出 ? 并结束程序。题目保证程序会结束。
october
MAY
what
aaaa
10
5
?
思路:用二维字符数组存储月份,对于输入的字符串,由于参杂着大小写,建议先进行转换,把他们都转换成小写字母,然后在把该字符串同每一个月份一一比较(月份定义时要设置它为小写),若找到则输出该月份,否则输出?
参考代码:
#include
#include
int main()
{
//定义月份
char month[12][20]={"january","february","march","april","may","june","july",
"august","september","october","november","december"};
char str[20];
int i;
while(gets(str)){ //循环输入字符串
for(i=0;i<strlen(str);i++)
if(str[i]>='A'&&str[i]<='Z') //如果有大写字母则转换成小写
str[i]=str[i]-'A'+'a';
for(i=0;i<12;i++) //寻找
if(strcmp(str,month[i])==0)
break;
if(i==12){ //找不到
printf("?\n");
return 0;
}
else //找到,则输出i+1,因为下标从0开始
printf("%d\n",i+1);
}
return 0;
}
古代先民认为,天下万物皆由五类元素组成,分别是金、木、水、火、土,彼此之间存在相生相克的关系。
相生关系为:木生火,火生土,土生金,金生水,水生木。
相克关系为:金克木,木克土,土克水,水克火,火克金。
本题就请你编写程序,判断任意一对给定的元素之间的关系。
输入在一行中给出一个正整数 N(≤10),随后 N 行,每行给出 2 个正整数 A 和 B,为两种元素的编号。这里假设金、木、水、火、土的编号顺次为 1、2、3、4、5。
对输入的每一对 A 和 B,如果 A 生 B,则输出 A sheng B;如果 A 克 B,则输出 A ke B。反之亦然。
2
4 2
5 3
2 sheng 4
5 ke 3
思路:和第一题类似,简单模拟就行了,看代码把……
参考代码:
#include
int main()
{
int n,a,b;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&a,&b);
if(a==4&&b==2||a==2&&b==4)
printf("2 sheng 4\n");
else if(a==4&&b==5||a==5&&b==4)
printf("4 sheng 5\n");
else if(a==1&&b==5||a==5&&b==1)
printf("5 sheng 1\n");
else if(a==1&&b==3||a==3&&b==1)
printf("1 sheng 3\n");
else if(a==3&&b==2||a==2&&b==3)
printf("3 sheng 2\n");
else if(a==1&&b==2||a==2&&b==1)
printf("1 ke 2\n");
else if(a==5&&b==2||a==2&&b==5)
printf("2 ke 5\n");
else if(a==5&&b==3||a==3&&b==5)
printf("5 ke 3\n");
else if(a==3&&b==4||a==4&&b==3)
printf("3 ke 4\n");
else if(a==1&&b==4||a==4&&b==1)
printf("4 ke 1\n");
}
return 0;
}
写在最后,其实多刷算法题,锻炼思维的话,做这些题目至少有一半的分,建议大家好好复习吧,虽然说学院不会挂很多人,但是去年200多个0分也是真的,最后祝大家期末考试顺利~