4

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

 2 years ago
source link: https://blog.51cto.com/u_15736437/5635169
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

20.循环相克令

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

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

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

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

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

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

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

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

如果平局,则输出 ​​Tie​​。

1≤N≤100

3
Hunter Gun
Bear Bear
Hunter Bear
Player1
Tie
Player2

这题可以采用转义的方式进行比较,分别令三者为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 eee
12343 555

输出样例:

abceeeab
12345553
  1. 第一个需要注意的点在于复习这种简便的连续输入方式。
  2. 第二需要注意substr的方法(截取字符串):
  • ​substr(str,pos,len)​​: 从pos开始的位置,截取len个字符。
  • 可以采用后缀方法的形式:str.substr(pos,len)。
  • 同时也可以省略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

输出样例:

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

#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;

}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK