稳赢

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔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 n;
	scanf("%d",&n);
	char s[1000];
	int count=0;
	while(1){
		scanf("%s",&s);
		if(strcmp(s,"End")==0)//一定要放到最上面,不能放到下面
			break;
		if(count==n){
			puts(s);
			count=0;
			continue;
		}
		if(strcmp(s,"ChuiZi")==0)
			printf("Bu\n");
		else if(strcmp(s,"JianDao")==0)
			printf("ChuiZi\n");
		else if(strcmp(s,"Bu")==0)
			printf("JianDao\n");
		count++;
	}
} 

 

<think>好的,我需要帮助用户寻找关于C语言PTA浙大编程题“稳赢”的解析。首先,我要回顾用户提供的引用内容,特别是引用[4],因为它直接提到了“稳赢”题目。用户希望得到题目的解析,所以需要详细分析题目要求和给出解决方案。 首先,我需要理解题目“稳赢”的具体要求。根据引用[4],题目要求编写一个程序根据对方的给出对应,但每隔K次必须一个平局。入格式部分可能包括对手的次数和K的值,应该是相应的应对策略,每隔K次平局一次。 接下来,我需要确保正确解析题目中的格式。例如,入可能先是K的值,然后是连续的对手,直到入“End”为止。时,每次应对要么要么平局,每隔K次必须平局一次。 然后,考虑如何设计算法。需要维护一个计数器来跟踪连续的胜利次数,当达到K次时,强制平局,并重置计数器。例如,如果K=2,那么每两次后必须平局一次。对于对手的每个,我们需要判断当前是否应该平局,否则根据规则返回对应。 可能的代码结构包括循环读取入,直到遇到“End”。在循环内部,根据当前的计数器决定是还是平局。处理每个时,比如对手“ChuiZi”,则正常情况下应“Bu”,但如果需要平局则也“ChuiZi”。 需要注意边界情况,例如当K=0时的处理,但根据题目描述,K应该是正整数。此外,每次平局后需要重置计数器,确保下一次重新开始计数。 最后,验证代码的正确性,测试同的入情况,确保每隔K次正确平局,其他时候正确应对。例如,当K=2时,入序列为“ChuiZi”、“JianDao”、“Bu”、“End”,应为“Bu”、“JianDao”、“Bu”然后遇到End结束。 总结步骤:读取K,初始化计数器,循环读取入,判断是否结束,根据计数器决定,更新计数器。同时处理对应的应对策略。</think>### C语言PTA浙大“稳赢”题目解析 **题目要求**:编写程序根据对方给出对应,但每隔$K$次必须平局一次[^4]。 #### 入格式 - 第一行入正整数$K$($\leq 10$) - 后续每行入对方(如`ChuiZi`、`JianDao`、`Bu`),以`End`结束入 #### 格式 - 对每次对应或平局(平局时相同式) --- ### 解题思路 1. **计数器管理**:使用变量`count`记录连续的次数,初始为0。 2. **平局条件**:当`count % (K+1) == K`时触发平局。 3. **式映射**:根据对手选择对应(如`ChuiZi`→`Bu`,`JianDao`→`ChuiZi`,`Bu`→`JianDao`)。 4. **循环控制**:循环读取入直到遇到`End`。 --- ### 参考代码 ```c #include <stdio.h> #include <string.h> int main() { int K, count = 0; scanf("%d", &K); char input[20]; while (1) { scanf("%s", input); if (strcmp(input, "End") == 0) break; if (count % (K + 1) == K) { // 需要平局 printf("%s\n", input); count = 0; } else { // 正常 if (strcmp(input, "ChuiZi") == 0) printf("Bu\n"); else if (strcmp(input, "JianDao") == 0) printf("ChuiZi\n"); else if (strcmp(input, "Bu") == 0) printf("JianDao\n"); count++; } } return 0; } ``` #### 代码说明 - **平局逻辑**:当`count`达到$K$的倍数时(`count % (K+1) == K`),与对手相同的式,并重置计数器。 - **逻辑**:通过`strcmp`判断对手式,对应胜利式。 - **边界处理**:入`End`时直接退循环。 --- ### 测试示例 **入**: ``` 2 ChuiZi JianDao Bu End ``` ****: ``` Bu // 正常 JianDao // 正常 Bu // 触发平局后重置计数器 ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值