如何根据输入骰子数量按指定格式打印骰子排列结果?
问题:骰子排列打印格式错误
我正在编写一个程序,可根据输入的骰子数量输出不同的骰子排列。输出结果时我希望按指定格式打印,但始终无法实现正确输出。例如,2个骰子时输出应为(1,1) (1,2) (1,3)...,3个骰子时应为(1,1,1) (1,1,2) (1,1,3)...等。
以下是我编写的打印函数:
void printList(list<int>& dice, int ndie){ list<int>::iterator it; for (it = dice.begin(); it != dice.end(); it++){ for(int c = 1; c <= ndie; c++){ if (c == 1){ cout << "("; } else if(c == ndie){ cout << ")"; } else if(c > 1 && c != ndie) { cout << *it << ","; } } } }
我已经实现了排列功能,仅打印函数存在问题。当输入3个骰子时,输出结果为(1,)(1,)(1,)(1,)(1,)(2,)(1,)(1,)(3,)...等错误格式。我已调试多日仍未解决,求助修正该打印函数以实现正确格式输出。
解决方案
你的代码逻辑完全搞反了:你现在是遍历每个骰子数字时,重复输出完整的括号框架,但正确逻辑应该是每ndie个数字组成一组排列,每组对应一个括号对,在组内依次输出数字和分隔符。
假设你的dice列表是按连续分组存储的(比如3个骰子时,每3个数字为一组排列:1,1,1是第一组,1,1,2是第二组,以此类推),修正后的打印函数如下:
void printList(list<int>& dice, int ndie){ auto it = dice.begin(); while (it != dice.end()) { cout << "("; for (int i = 0; i < ndie; ++i) { cout << *it; // 不是组内最后一个数字,输出逗号 if (i != ndie - 1) { cout << ","; } ++it; } cout << ") "; } cout << endl; }
核心修正说明
- 循环层级调整:外层循环按组推进,每组处理
ndie个数字;内层循环负责输出组内的数字和分隔符。 - 符号输出逻辑:左括号在组开头输出,右括号在组结尾输出;组内除最后一个数字外,其他数字后加逗号。
- 迭代器正确移动:在内层循环中逐个移动迭代器,确保每组恰好消耗
ndie个元素,避免重复或遗漏。
测试后,3个骰子的输出会变成(1,1,1) (1,1,2) (1,1,3)...,2个骰子则输出(1,1) (1,2) (1,3)...,完全符合你的要求。
内容的提问来源于stack exchange,提问作者pBoat
相关产品推荐
相关产品推荐

