天梯赛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 稳赢的主要内容,如果未能解决你的问题,请参考以下文章

Go语言入门150题 L1-044 稳赢 (15 分) Go语言 | Golang

天梯赛每日打卡05(41-45题解)

L1-044 稳赢

L1-044 稳赢

2018/12/08 L1-044 稳赢 Java

石头剪刀布 L1-044 稳赢 15分