You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据输入骰子数量按指定格式打印骰子排列结果?

问题:骰子排列打印格式错误

我正在编写一个程序,可根据输入的骰子数量输出不同的骰子排列。输出结果时我希望按指定格式打印,但始终无法实现正确输出。例如,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:46:13