我有一场比赛,比赛的重点是在21个回合内找到解决方案。如果它找不到解决方案,它应该输出"No solution“,并继续主要的操作。如果有一个解决方案,它应该向上堆栈,并输出每一步(现在向后是好的)。
当我找不到解决方案时,我正在尝试找出如何在不打印任何东西的情况下离开堆栈。目前,它将打印“21圈内无解决方案”。但仍然会向上堆栈,打印每一个动作。当有一个解决方案时,它确实起作用了。
bool TabletStock(int _tablets, int _turns) {
if (_tablets == 18){
cout << "Found solution. I have exactly 18 tablets, with " << 21 - _turns << " moves left.\n";
return 1;
}
_turns++;
if (_turns >= 21){
cout << "No solution in 21 turns.\n";
return 0;
}
if (_tablets % 2 == 1){
TabletStock((++_tablets) / 2, _turns);
cout << "After incrementing, reduce " << _tablets << " by half to get " << _tablets / 2 << ".\n";
}
else if (_tablets % 3 == 0 && _tablets % 18 == 0){
TabletStock(_tablets / 3, _turns);
cout << "With " << _tablets << ", divide by 3 to get " << _tablets / 3 << ".\n";
}
else{
TabletStock((_tablets + 24), _turns);
cout << "With " << _tablets << ", add 24 to get " << _tablets + 24 << ".\n";
}
}此时的函数调用为TabletStock(int,0);
我一直在尝试在"if (_turns >= 21)“语句中做一些事情,因为它在打印所有步骤之前打印出来,所以如果我在if语句中找到了一种”中断“堆栈的方法,也许我可以让它不输出所有的cout步骤。
发布于 2017-04-21 02:15:20
当您调用TabletStock()时,它将返回bool。每一次打印都应该用if语句包装。如果为false,则不打印。
例如,更改以下内容:
TabletStock((_tablets + 24), _turns);
cout << "With " << _tablets << ", add 24 to get " << _tablets + 24 << ".\n";至:
if(TabletStock((_tablets + 24), _turns))
{
cout << "With " << _tablets << ", add 24 to get " << _tablets + 24 << ".\n";
}发布于 2017-04-21 02:21:35
每次在字符串变量中追加结果时,都可以将字符串存储在作用域之外的变量中,或者将其添加到函数参数中。
if (_tablets % 3 == 0 && _tablets % 18 == 0)
{
mystring += "After incrementing, reduce ....... ";
TabletStock(_tablets / 3, _turns);
} 如果在最后:
if (_tablets == 18)
{
cout << mystring << endl;
return 1;
}https://stackoverflow.com/questions/43526837
复制相似问题