每日算法刷题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

输出样例:

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;

}
目录
相关文章
|
10天前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
26 0
|
2月前
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
2月前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
2月前
|
算法
【算法】滑动窗口——无重复字符的最长子串
【算法】滑动窗口——无重复字符的最长子串
|
15天前
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
41 1
两个字符串匹配出最长公共子序列算法
|
9天前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
8 0
|
2月前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
2月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
|
2月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
2月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
33 0

热门文章

最新文章