天梯赛L1-044 稳赢
Posted lian369
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了天梯赛L1-044 稳赢相关的知识,希望对你有一定的参考价值。
一、问题描述
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi
代表“锤子”、JianDao
代表“剪刀”、Bu
代表“布”。End
代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
输出样例:
Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu
二、设计思路
1、从键盘接收一个k,即平局间隔的次数;
2、用while(1)死循环来接收字符串,代表对方的每一次出招,如果是“End”就break结束,如果不是则对应进行判断;
3、定义一个变量count来记录赢得次数,以达到每进行k局就平局的要求,初始值为0;
4、当count!=k时,如果对方出“石头”,就输出“布”,如果对方出“布”,就输出“剪刀”,如果对方出“剪刀”,就输出“石头”,当count==k时,对方出啥我就输出啥,并在输出完后将count置为0;
三、程序流程图
四、伪代码
五、代码
#include <iostream> using namespace std; int main() int k; cin >> k; int i = 0; getchar(); int count = 0; while (1) string s; cin >> s; if (s == "End") break; if (count == k) cout << s << endl; count = 0; else count++; if (s == "ChuiZi") cout << "Bu" << endl; else if (s == "Bu") cout << "JianDao" << endl; else if (s == "JianDao") cout << "ChuiZi" << endl; return 0;
六、总结
1、while(1)是一个死循环,可以从键盘接收无限次数据,直到出现不满足要求的数据;
2、类似于间隔n次就出现一次特殊情况的问题,可以定义一个变量作为计数器,初始值为0,当计数器等于n时特殊处理,过后再将计数器置为0;
pta 天梯赛 L1-050 倒数第N个字符串 (15 分)
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。
输入格式:
输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤10?5??)。
输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。
输入样例:
3 7417
输出样例:
pat
思路:找规律,像十进制一样,要求得每一位,先求%10,然后/10;
由于本题找的是倒数的,可以先把它转化为正数的,总数为pow(26,l);正数的顺序=总数-倒数;
求得正数的顺序后就可以直接用a相加,即a=0
代码如下:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 5 int main() 6 { 7 int l,n,i; 8 cin >> l >> n; 9 int m = pow(26,l) - n;//转换为正数从0开始 10 char c[6]; 11 i = 0; 12 while(l--) 13 { 14 c[i++] = ‘a‘ + m % 26; 15 m /= 26; 16 } 17 for(int j = i - 1;j >= 0;j--) 18 cout << c[j]; 19 cout << endl; 20 return 0; 21 }
以上是关于天梯赛L1-044 稳赢的主要内容,如果未能解决你的问题,请参考以下文章