USACO珠子,无法在循环时调试
USACO-beads, unable to debug while loops
这是我正在处理的问题
我没有收到任何编译时错误,运行时错误,并且我的大多数代码似乎都可以正常工作。调试后,我发现left()
和right()
内的while循环导致了问题。我很难弄清楚为什么,所以任何帮助都会很棒。谢谢。
以防万一——
示例输入:
29
wwwbbrwrbrwrwrwwrbwrwrrb
示例输出:
11
法典:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000000 + 10;
int n;
char cur_beads[MAXN];
//WORKS LIKE A BOSS:
void final_array(int int_in, char * array_in){
for (int i = 1; i <= int_in; i++){
cur_beads[n-i] = array_in[int_in - i];
}
for (int i = 0; i < n - int_in; i++){
cur_beads[i] = array_in[int_in+i];
}
// cout << "new array, for "<< int_in << " = " <<cur_beads << endl << endl;;
}
//ERROR HERE:
int left(){ //function
int left_a = 0, left_b = 0, c = 0;
cout << cur_beads << endl;
while((cur_beads[c] != 'b' || cur_beads[c] != 'w') && c <= n){
cout << cur_beads[c] << endl;
c++;
}
cout << "c = " << c << endl;
while((cur_beads[c] == 'b' || cur_beads[c] == 'w')){
left_b++;
c++;
}
cout << "left_b = " << left_b << endl;
c = 0;
while((cur_beads[c] != 'r' || cur_beads[c] != 'w') && c <= n){
c++;
}
cout << "c = " << c << endl;
while(cur_beads[c] == 'r' || cur_beads[c] == 'w'){
left_a++;
c++;
}
cout << "left_a = " << left_a << endl;
if (left_a > left_b){
return left_a;
cout << "left = " << left_a << endl;
}
else{
return left_b;
cout << "left = " << left_b << endl;
}
}
//ERROR HERE:
int right(){ //function
int right_a = 0, right_b = 0, c = 0;
while((cur_beads[n-c] != 'b' || cur_beads[n-c] != 'w') && c <= n){
c++;
}
while((cur_beads[n-c] == 'b' || cur_beads[n-c] == 'w')){
right_b++;
c++;
}
c = 0;
while((cur_beads[n-c] != 'a' || cur_beads[n-c] != 'w') && c <= n){
c++;
}
while((cur_beads[n-c] == '' || cur_beads[n-c] == 'w')){
right_a++;
c++;
}
if (right_a > right_b){
return right_a;
cout << "right = " << right_a << endl;
}
else{
return right_b;
cout << "right = " << right_b << endl;
}
}
int main(){
int ans = 0, current_ans = 0; //stored as 0 by default
ifstream fin("beads.in");
ofstream fout("beads.out");
fin >> n;
char beads[MAXN];
for(int i = 0; i < n; i++){
fin >> beads[i];
}
// final_array(11, beads);
// current_ans = left();
// cout << "current_ans = " << current_ans << endl;
for(int i = 1; i < n; i++){ //main loop
final_array(i, beads);
current_ans = left() + right();
cout << "current_ans = " << current_ans << endl;
if (current_ans > ans){
ans = current_ans;
}
}
fout << ans << endl;
}
left()
中的所有 cout 都是用于调试代码的。
行
while((cur_beads[c] != 'b' || cur_beads[c] != 'w') && c <= n)
没有意义,因为任何字符都不会同时是"b"和"w"。更有意义的是将此行(以及其他有此问题的行(修改为
while((cur_beads[c] != 'b' && cur_beads[c] != 'w') && c <= n)
相关文章:
- 如何循环打印顶点结构
- 当回溯以零开始时,如何调试崩溃
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- USACO珠子,无法在循环时调试
- 如何调试我的 while 循环C++程序?
- 为什么在发布模式下无法访问 for 循环,但在调试中它工作正常
- 如何调试为什么Arduino会中断while循环
- 在调试线程时无限循环
- 代码块 13.12 C++基本的循环调试错误
- C++Visual Studio-运算符重载中的Empty For循环导致调试错误
- 你能调试自动矢量化循环吗
- 调试过程中的无限循环
- For循环在调试器中不能正常工作
- Visual C++,使用相同迭代器名称的多个for循环,在调试模式下在范围外可见
- visual studio 2010 - c++ VS2010调试器在超出循环作用域的循环变量上表现奇怪