在C++中做一个场景问题,我不确定如何处理布尔和if循环

Doing a scenario problem in C++ and am unsure of how to proceed with boolean and if-loops

本文关键字:不确定 何处理 布尔 循环 if 处理 问题 C++ 一个      更新时间:2023-10-16

**这是一个翻译,写得很匆忙。如果你需要任何澄清,请发表评论。

给出的问题是:我们生活在一个垃圾太多的世界里。我们已经找到了压缩垃圾的方法,但只能用特定的方式来压缩,否则垃圾就会爆炸。垃圾必须排成一行,并且只能与邻居一起压缩,并且只有当邻居的值与其相同时。

第一个输入是int N,它表示行中的垃圾量。第二个输入是t,它必须有与N中的值一样多的字符输入。如果整个东西能够被压缩,直到只剩下1个垃圾(t(,那么输出将是"YES"。

我们已经发现,只要N==1,或者t中的所有输入(所有字符(都相同,输出就会是YES。

示例输入/输出:

Input:
2
1 1
Output:
YES

Input:
3
1 2 1
Output: 
NO

Input:
1
5
Output:
YES

到目前为止,我们得到的是:

#include <iostream>
#include <string>
using namespace std;
int N;
string t;
bool allCharactersSame(string s) 
{ 
int n = s.length(); 
for (int i = 1; i < n; i++) {
if (s[i] != s[0]) 
return false; 
}
return true; 
} 
int main()
{
cin>>N;
cin >> t;
if (N == 1)
{
cout << "YES";
}
else if (allCharactersSame(t))
{
cout <<"YES";
}
else
{
cout<<"NO";
}
}

这个问题是不管怎样它都会输出YES,我们认为这是因为它考虑了输入的空白。如果我们不包括空格,它会很好。但问题是,我们必须有空间来分隔我们的输入。所以,我们被难住了。有什么建议吗?

(我无法发表评论,因此我将此作为答案编写。(

还有一些其他的问题比你想象的要严重,因为问题中的代码可以正常工作。当我给它输入"5 11111"时,它说"是",当我给他输入"5 12345"时,他说"否"。

Kai的第一条评论有点奇怪,当确定字符串中的所有字符是否相同时,将每个字符与第一个字符进行比较就足够了,就像在allCharactersSame((方法中一样。

我建议您在提供的输入上添加一些检查;如果给定的N与给定字符串的长度不匹配,程序可能会注意到。现在,例如输入"3a"表示"是"。