N.T*_*.T. 5 c++ arrays element char error-checking
一个正确的数组
假设我们有一个N长度的数组,由大写字母A,B和C组成.如果在数组中一个接一个地出现的每两个C字母之间,我们将数组称为"右数组",还有更多A字母比B字母.我的工作是发现一个给定的数组是否为"右",如果是,我要打印出"右",否则我就打印了给定的条件有多少个(以铯之间的位置)是不真实的(还有更多Bs比As).
输入:在第一行中,我们输入数组N中的lettes数(1 <N> 200).在下一行中,我们输入数组,中间没有空格.
输出:在一行中打印答案.
例子:
输入:16 ABBCAABCACBAAACB输出:右
输入:15 ABBCABCACBAAACB输出:1
输入:14 CABCABBCBAABBC输出:3
现在,我已经尝试解决这个问题,但是第三个例子对我不起作用 - 我得到2的输出,如上所述我应该得到3,除此之外 - 它编译完全没问题.
#include <iostream>
using namespace std;
int main()
{
int N;
cin >> N;
char Ar[N];
int A = 0;
int B = 0;
int piece = 0;
int attempt = 0;
for (int i = 0; i < N; i++) {
cin >> Ar[i];
}
for (int i = 0; i < N; i++) {
if (Ar[i] == 'C') {
for (int j = i + 1; i < N; j++) {
if (Ar[j] == 'A') {
A++;
} else if (Ar[j] == 'B') {
B++;
} else if (Ar[j] == 'C') {
i = j;
break;
}
}
if (A > B) {
piece++;
attempt++;
} else if (A <= B) {
attempt++;
}
A = 0;
B = 0;
}
}
if (piece == attempt) {
cout << "RIGHT";
} else {
cout << attempt - piece;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您有几个问题,如下面的代码注释中所述:
int N;
cin >> N;
std::vector<char> Ar(N);
for (int i = 0; i < N; i++) {
cin >> Ar[i];
}
int piece = 0;
int attempt = 0;
for (int i = 0; i < N - 1; i++) {
if (Ar[i] != 'C') {
// Skip letters until the first C
continue;
}
int A = 0;
int B = 0;
int j = i + 1;
for (; j < N; j++) {
if (Ar[j] == 'A') {
A++;
} else if (Ar[j] == 'B') {
B++;
} else if (Ar[j] == 'C') {
// We only account for blocks between Cs
attempt++;
if (A > B) {
piece++;
}
break;
}
}
// Next piece starts at j, i will be incremented by outer loop
i = j - 1;
}
Run Code Online (Sandbox Code Playgroud)