鹦鹉学舌一开始从简单开始,

鹦鹉学舌
描述

小明养了一直鹦鹉,平时喜欢训练鹦鹉说话,一开始从简单的单词开始,每个单词小明都会教很多遍,所以鹦鹉也会重复很多遍,由于鹦鹉还小,没有数字的概念,会不停的重复,一天小明想知道自己的鹦鹉是否一直在重复的说自己教它的单词,于是把鹦鹉说的单词录了下来,并给出小明教的单词,由于鹦鹉一直在重复,所以句子可能会很长,小明请你帮助他判断一下,如果一直在重复一个单词输出YES,否则输出NO

day13-01.zip

输入
第一行一个整数T(T<=100),表示数据组数

其后T行,每行两个字符串,用空格隔开,第一个字符串a表示鹦鹉说的句子,第二个字符串b表示小明教的单词

输出
T行,根据题目要求输出YES或NO

输入样例 1

1

输出样例 1

YES
输入样例
输出样例 2

NO
提示

a的长度小于105,b的长度小于

直接给代码看


#include <iostream>
#include <string>
using namespace std;

// 判断鹦鹉是否一直重复一个单词
bool is_repeating(string a, string b) {
  // 如果鹦鹉说的句子为空或者小明教的单词为空,返回false
  if (a.empty() || b.empty()) return false;
  // 如果鹦鹉说的句子长度不是单词长度的整数倍,返回false
  if (a.size() % b.size() != 0) return false;
  // 遍历鹦鹉说的句子,每次取出一个单词长度的子串,和小明教的单词比较,如果不相等,返回false
  for (int i = 0; i < a.size(); i += b.size()) {
    string sub = a.substr(i, b.size());
    if (sub != b) return false;
  }
  // 如果都相等,返回true
  return true;
}

int main() {
  int T; // 数据组数
  cin >> T; // 输入数据组数
  while (T--) { // 对每组数据
    string a, b; // 鹦鹉说的句子和小明教的单词
    cin >> a >> b; // 输入句子和单词
    if (is_repeating(a, b)) { // 调用函数判断是否重复
      cout << "YES" << endl; // 如果重复,输出YES
    } else {
      cout << "NO" << endl; // 如果不重复,输出NO
    }
  }
  return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

引用chatgpt内容作答:
运行结果:

img

img

根据题目描述,你需要判断鹦鹉是否一直在重复一个单词。对于每组数据,你需要检查鹦鹉说的句子是否只包含小明教的那个单词,如果是的话,输出"YES",否则输出"NO"。

以下是一个c++代码示例来解决这个问题:

#include <iostream>
#include <string>

using namespace std;

string checkRepetition(const string& sentence, const string& word) {
    size_t wordLength = word.length();
    size_t sentenceLength = sentence.length();
    
    if (sentenceLength % wordLength != 0) {
        return "NO";
    }
    
    for (size_t i = 0; i < sentenceLength; i += wordLength) {
        if (sentence.substr(i, wordLength) != word) {
            return "NO";
        }
    }
    
    return "YES";
}

int main() {
    int T;
    cin >> T;

    for (int i = 0; i < T; ++i) {
        string sentence, word;
        cin >> sentence >> word;
        
        string result = checkRepetition(sentence, word);
        cout << result << endl;
    }

    return 0;
}


将上述代码保存为 .cpp 文件,然后使用 C++ 编译器进行编译和运行。根据输入输出示例,程序将会按照题目要求输出结果。

引用 皆我百晓生 小程序回复内容作答:

根据题意,我们需要判断鹦鹉说的句子中是否只有一个单词一直重复。我们可以按以下步骤编写代码:

  1. 读取整数T,表示数据组数。
  2. 使用一个循环来处理每一组数据:
    1. 读取两个字符串a和b。
    2. 使用split()方法将字符串a分割成单词列表words。
    3. 使用count()方法统计单词b在列表words中出现的次数。
    4. 判断统计结果,如果出现次数等于列表words的长度,表示只有一个单词一直重复,输出"YES";否则,输出"NO"。
  3. 结束程序。

下面是相应的Python代码实现:

T = int(input())

for _ in range(T):
    a, b = input().split()
    words = a.split()
    
    if words.count(b) == len(words):
        print("YES")
    else:
        print("NO")

请注意,这里使用了一个下划线作为循环变量名,表示这个变量在循环中不会被使用。您可以将其替换为其他变量名。另外,这段代码假设了输入的数据是合法的,即每组数据的句子不会为空,并且教的单词也不会为空。如有需要,请根据实际情况进行适当的错误处理。

#include <iostream>
#include <string>
using namespace std;
string method(string sentence, string word) {
    int len = sentence.length();
    int wordLen = word.length();
    if (len < wordLen) {
        return "NO";
    }
    for (int i = 0; i <= len - wordLen; i++) {
        if (sentence.substr(i, wordLen) == word) {
            return "YES";
        }
    }
    return "NO";
}

int main() {
    int T;
    cin >> T;
    for (int i = 0; i < T; i++) {
        string sentence, word;
        cin >> sentence >> word;
        cout << method(sentence, word) << endl;
    }
    return 0;
}

【以下回答由 GPT 生成】

解决方案

首先,我们需要读取输入,并根据给定的数据组数T进行循环处理。

在每一组数据中,我们需要读取鹦鹉说的句子a和小明教的单词b,并进行判断。

我们可以使用字符串处理函数来解决这个问题。

首先,使用字符串分割函数将鹦鹉说的句子a按照空格拆分为一个字符串数组。

然后,对于数组中的每个字符串,我们可以与小明教的单词b进行比较。

注意,鹦鹉可能会说的句子很长,所以我们需要判断是否重复了,也就是说,连续的两个字符串是否相同。

最后,根据判断的结果输出YES或NO。

下面是C++代码的实现:

#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

vector<string> split(const string& s, char delimiter) {
    vector<string> tokens;
    string token;
    istringstream tokenStream(s);
    while (getline(tokenStream, token, delimiter)) {
        tokens.push_back(token);
    }
    return tokens;
}

bool isRepeatingWords(const string& a, const string& b) {
    vector<string> words = split(a, ' ');
    int n = words.size();
    for (int i = 1; i < n; i++) {
        if (words[i] != b || words[i] == words[i - 1]) {
            return false;
        }
    }
    return true;
}

int main() {
    int T;
    cin >> T;
    cin.ignore();

    for (int i = 0; i < T; i++) {
        string a, b;
        getline(cin, a);
        getline(cin, b);

        if (isRepeatingWords(a, b)) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }

    return 0;
}

以上代码中,我们定义了一个split函数来将字符串按照分隔符拆分为字符串数组。

接着,我们定义了一个isRepeatingWords函数来判断是否重复了单词。

main函数中,我们首先读取数据组数T,然后对于每一组数据,读取鹦鹉说的句子a和小明教的单词b,并调用isRepeatingWords函数进行判断,并输出结果。

最后,我们返回0表示程序成功运行结束。



【相关推荐】


  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7662275
  • 除此之外, 这篇博客: 2018年第九届蓝桥杯【C++省赛B组】【第八题:日志统计】中的 小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:ts id 表示在ts时刻编号id的帖子收到一个"赞"。 现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。 具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。 给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。 部分也许能够解决你的问题。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

输入样例没有,重新贴一下看看

#include <iostream>
using namespace std;
 
//参考了这个代码:https://www.cnblogs.com/Jozky/p/14075782.html
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param a string字符串 待计算字符串
     * @return int整型
     */
    bool judge(string &a,int s,int len)
    {
        for(int i=s;i<s+len;i++){
            if(a[i]!=a[i+len])return 0;
        }
        return 1;
    }
    int solve(string a) {
        // write code here
        int len=a.size();
        for(int i=len/2;i;i--)
        {
            for(int s=0;s<=len-i*2;s++)
            {
                if(judge(a,s,i))
                    return 2*i;
            }
        }
        return 0;
    }
};
 
int main()
{
   string s;
    cin >> s;
    Solution sol;
    if (sol.solve(s))
        cout << "YES";
    else
        cout << "NO";
   return 0;
}