程序设计实训8月15日小组编程
7-4 稳赢
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
输出样例:
Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu
#include<stdio.h>
#include<string.h>
int main()
{
int k,z=0;
char str[10];
scanf("%d",&k);
while(1){
scanf("%s",str);//用gets就错了
if(strcmp(str,"End") == 0) break;
if(z != k){
if(strcmp(str,"ChuiZi") == 0)
printf("Bu\n");
else if(strcmp(str,"JianDao") == 0)
printf("ChuiZi\n");
else if(strcmp(str,"Bu") == 0)
printf("JiaoDao\n");
z++;
}
else {
puts(str);
z = 0;
}
}
return 0;
}
ssn:字符串的函数当初学的时候只考计算长度的,所以别的我都很生疏。上课的时候是输入字符串,然后比较str[0]是C,J,B还是E,其实这个思路也没有问题。我错在scanf(“%s”)写的是gets,忘了gets还会连回车一起读入。(但是我后面加了getchar还是测试不成功,这点求大佬指点)
今天测试了一下,竟然不对:
通过观察,此题可能想一起输入之后再一起输出,并不是他出一招我马上就跟一招。又改:
#include<stdio.h>
#include<string.h>
//jiandao为1,chuizi为2,bu为3
int main()
{
int k,z=0;
char str[10];
int a[10001]={0};
scanf("%d",&k);
for(int i=0;;i++){
scanf("%s",str);
if(strcmp(str,"End") == 0) break;
if(z != k){
if(strcmp(str,"ChuiZi") == 0)
a[i]=3;
else if(strcmp(str,"JianDao") == 0)
a[i]=2;
else if(strcmp(str,"Bu") == 0)
a[i]=1;
z++;
}
else {
if(strcmp(str,"ChuiZi") == 0)
a[i]=2;
else if(strcmp(str,"JianDao") == 0)
a[i]=1;
else if(strcmp(str,"Bu") == 0)
a[i]=3;
z = 0;
}
}
for(int i=0;a[i]!=0;i++){
if(a[i]==1){
printf("JianDao\n");
}
else if(a[i]==2){
printf("ChuiZi\n");
}
else if(a[i]==3){
printf("Bu\n");
}
}
return 0;
}
7-6 大笨钟的心情
有网友问:未来还会有更多大笨钟题吗?笨钟回复说:看心情……
本题就请你替大笨钟写一个程序,根据心情自动输出回答。
输入格式:
输入在一行中给出 24 个 [0, 100] 区间内的整数,依次代表大笨钟在一天 24 小时中,每个小时的心情指数。
随后若干行,每行给出一个 [0, 23] 之间的整数,代表网友询问笨钟这个问题的时间点。当出现非法的时间点时,表示输入结束,这个非法输入不要处理。题目保证至少有 1 次询问。
输出格式:
对每一次提问,如果当时笨钟的心情指数大于 50,就在一行中输出 心情指数 Yes,否则输出 心情指数 No。
输入样例:
80 75 60 50 20 20 20 20 55 62 66 51 42 33 47 58 67 52 41 20 35 49 50 63
17
7
3
15
-1
输出样例:
52 Yes
20 No
50 No
58 Yes
#include<stdio.h>
int main()
{
int a[24],n;
int i;
for(i=0;i<24;i++){
scanf("%d",&a[i]);
}
while(1){
scanf("%d",&n);
if(n<0||n>23) break;
if(a[n]>50){
printf("%d Yes\n",a[n]);
}
else{
printf("%d No\n",a[n]);
}
}
return 0;
}
ssn:这道题好简单啊!写题的时候就没写这道,亏死!
这道题之前写过:
7-7 统计一行文本的单词个数