写点什么

每日算法刷题 Day6- 循环相克令,字符串插入,单次字符出现

作者:timerring
  • 2022 年 9 月 29 日
    山东
  • 本文字数:1671 字

    阅读完需:约 5 分钟

⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。

🔥本文已收录于算法刷题系列专栏: 每日算法题解 欢迎订阅,持续更新。



20.循环相克令

循环相克令是一个两人玩的小游戏。


令词为“猎人、狗熊、枪”,两人同时说出令词,同时做出一个动作——猎人的动作是双手叉腰;狗熊的动作是双手搭在胸前;枪的动作是双手举起呈手枪状。


双方以此动作判定输赢,猎人赢枪、枪赢狗熊、狗熊赢猎人,动作相同则视为平局。


现在给定你一系列的动作组合,请你判断游戏结果。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。


接下来 T 行,每行包含两个字符串,表示一局游戏中两人做出的动作,字符串为 Hunter, Bear, Gun 中的一个,这三个单词分别代表猎人,狗熊和枪。

输出格式

如果第一个玩家赢了,则输出 Player1


如果第二个玩家赢了,则输出 Player2


如果平局,则输出 Tie

数据范围

1≤N≤100

输入样例

3Hunter GunBear BearHunter Bear
复制代码

输出样例

Player1TiePlayer2
复制代码

思路

这题可以采用转义的方式进行比较,分别令三者为 0,1,2。寻找其中的规律即可,通常这种带有循环的关系都考虑取模的方法。


#include<bits/stdc++.h>using namespace std;
int main(){ int turn; cin>>turn; while(turn --) { string a,b; cin >> a >> b; int x,y; if(a == "Hunter")x = 0; else if(a == "Bear")x = 1; else x = 2; if(b == "Hunter")y= 0; else if(b == "Bear")y = 1; else y = 2; if(x == y)puts("Tie"); else if(x == (y+1)%3) puts("Player1"); else puts("Player2"); } return 0;}
复制代码

21.字符串插入

有两个不包含空白字符的字符串 strstr 和 substrsubstr,strstr 的字符个数不超过 1010,substrsubstr 的字符个数为 33。(字符个数不包括字符串结尾处的 \0。)


将 substrsubstr 插入到 strstr 中 ASCII 码最大的那个字符后面,若有多个最大则只考虑第一个。

输入格式

输入包括若干行,每一行为一组测试数据,格式为


str substr
复制代码

输出格式

对于每一组测试数据,输出插入之后的字符串。

输入样例:

abcab eee12343 555
复制代码

输出样例:

abceeeab12345553
复制代码

思路:

  1. 第一个需要注意的点在于复习这种简便的连续输入方式。

  2. 第二需要注意 substr 的方法(截取字符串):

  3. substr(str,pos,len): 从 pos 开始的位置,截取 len 个字符。

  4. 可以采用后缀方法的形式:str.substr(pos,len)。

  5. 同时也可以省略 len 参数,则默认截取到最后部分。


#include<bits/stdc++.h>using namespace std;

string str,substr;
int main (){ while(cin>>str>>substr) { int p = 0; for(int i = 0; i < str.size(); i++) if(str[i] > str[p]) p = i; cout << str.substr(0,p+1) + substr + str.substr(p+1)<<endl;
} return 0;}
复制代码

22.只出现一次的字符

给你一个只包含小写字母的字符串。


请你判断是否存在只在字符串中出现过一次的字符。


如果存在,则输出满足条件的字符中位置最靠前的那个。


如果没有,输出 no

输入格式

共一行,包含一个由小写字母构成的字符串。


数据保证字符串的长度不超过 100000100000。

输出格式

输出满足条件的第一个字符。


如果没有,则输出 no

输入样例:

abceabcd
复制代码

输出样例:

e
复制代码

思路:

另存一个数组来保存相应字符出现的次数。


#include<bits/stdc++.h>using namespace std;
int cnt[26];char str[100001];
int main(){ cin >>str; for(int i = 0 ,len = strlen(str); i < len ; i++)cnt[str[i] - 'a']++; for(int i = 0 ,len = strlen(str); i < len ; i++) if(cnt[str[i] - 'a'] == 1) { cout<< str[i]<<endl; return 0; } puts("no"); return 0;
}
复制代码


发布于: 2022 年 09 月 29 日阅读数: 2
用户头像

timerring

关注

还未添加个人签名 2022.07.14 加入

还未添加个人简介

评论

发布
暂无评论
每日算法刷题Day6-循环相克令,字符串插入,单次字符出现_算法_timerring_InfoQ写作社区