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

Golang实现输出所有唯一递增三位数字组合的问题求助

问题解决思路与修正代码

你的代码目前的循环逻辑存在问题:j从1开始、k从2起始的设定,会出现i >= j或j >= k的无效组合(比如i=1时j=1,直接违反了第二位大于第一位的要求);同时fmt.Println会把每个组合单独输出一行,完全没处理逗号分隔的格式。

下面针对你的三个需求逐一解决:

1. 确保组合唯一且符合i<j<k

直接调整循环的起始条件,让循环天然生成严格递增的三元组:

  • 外层i从0到7(要留两个比它大的数字,所以i最大为7,对应7<8<9)
  • 中间j从i+1开始到8(j必须严格大于i,且留一个比j大的k)
  • 内层k从j+1开始到9(k必须严格大于j)
    这种循环逻辑下,生成的每个(i,j,k)都满足i<j<k,且所有组合必然唯一——严格递增的三个数字不可能出现重复组合。

2. 单行输出+逗号分隔

提供两种简洁实现方式:

方式一:先收集再拼接(清晰直观)

package main

import (
	"fmt"
	"strings"
)

func main() {
	var combinations []string
	for i := 0; i <= 7; i++ {
		for j := i + 1; j <= 8; j++ {
			for k := j + 1; k <= 9; k++ {
				// 格式化为"012"这类字符串存入切片
				combinations = append(combinations, fmt.Sprintf("%d%d%d", i, j, k))
			}
		}
	}
	// 用", "拼接所有组合后一次性输出
	fmt.Println(strings.Join(combinations, ", "))
}

方式二:边循环边输出(节省内存)

package main

import "fmt"

func main() {
	isFirst := true
	for i := 0; i <= 7; i++ {
		for j := i + 1; j <= 8; j++ {
			for k := j + 1; k <= 9; k++ {
				if isFirst {
					fmt.Printf("%d%d%d", i, j, k)
					isFirst = false
				} else {
					fmt.Printf(", %d%d%d", i, j, k)
				}
			}
		}
	}
	// 最后补个换行
	fmt.Println()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:01:07