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

如何仅使用单循环按指定顺序输出两个骰子的所有排列结果

解决方案

你需要的单个循环实现可以通过两种思路完成,都能输出和原有逻辑完全一致的结果:

思路1:利用状态变量自增(最简洁,无额外数学运算)

核心逻辑是维护两个骰子值的状态,每次循环后更新第二个骰子值,当第二个骰子超过6时,重置第一个骰子+1,第二个骰子和第一个骰子对齐,总共循环21次(两个骰子非降序组合总数为6*7/2=21)。

普通单循环写法

int i = 1, j = 1;
for (int k = 0; k < 21; k++) {
    printf("%d %d\n", i, j);
    j++;
    if (j > 6) {
        i++;
        j = i;
    }
}

单行实现

for(int i=1,j=1,k=0;k<21;k++,j++>6?(i++,j=i):0) printf("%d %d\n",i,j);

思路2:除法+取模实现(符合你推测的实现方向)

核心逻辑是遍历两个骰子的全排列共36种可能,通过除法和取模拆分出两个骰子的值,只输出满足i<=j的组合即可。

普通单循环写法

for (int k = 1; k <= 36; k++) {
    int i = (k-1)/6 + 1;
    int j = (k-1)%6 + 1;
    if (i <= j) {
        printf("%d %d\n", i, j);
    }
}

单行实现

for(int k=1;k<=36;k++,((k-1)/6+1)<=((k-1)%6+1)?printf("%d %d\n",(k-1)/6+1,(k-1)%6+1):0);

内容的提问来源于stack exchange,提问作者PolarisEmperor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:15:05