C 查找3位数字的所有可用组合

C 查找3位数字的所有可用组合,c,algorithm,C,Algorithm,请帮助我了解如何检查我有相同的号码,但顺序不同 void ft_print_comb(void) { int hun; int doz; int uni; hun = 0; doz = 1; uni = 2; solver(hun, doz, uni); } void print( char f, char se, char thi) { ft_putchar(f); ft_putchar(se); ft

请帮助我了解如何检查我有相同的号码,但顺序不同

void ft_print_comb(void)
{    
    int hun;
    int doz;
    int uni;

    hun = 0;
    doz = 1;
    uni = 2;

    solver(hun, doz, uni);
}
void print( char f, char se, char thi)
{
    ft_putchar(f);
    ft_putchar(se);
    ft_putchar(thi);
    ft_putchar(',');
}
void solver(int x, int y, int z)
{
    while (x < 9){    
        while (y<8){    
            while (z<7){    
                if (x < y && y < z ){
                    print(x, y, z);
                }
                z++;
            }
            y++;
        }
        x++;
    }
}
987不在那里,因为789已经在那里了。
999不存在,因为数字9多次出现。

最简单的方法是确保您永远不会构造这样的重复数字。以下是一个例子:

int main(void){
    int i, j, k;
    for (i = 0; i <= 9; i++) {
        for (j = i+1; j <= 9; j++) {
            for (k = j+1; k <= 9; k++) {
                printf("%d%d%d\n", i, j, k);
            }
        }
    }
}
int main(无效){
int i,j,k;

对于(i=0;i而言,最简单的方法是确保从不构造此类重复的数字。以下是一个示例:

int main(void){
    int i, j, k;
    for (i = 0; i <= 9; i++) {
        for (j = i+1; j <= 9; j++) {
            for (k = j+1; k <= 9; k++) {
                printf("%d%d%d\n", i, j, k);
            }
        }
    }
}
int main(无效){
int i,j,k;

对于(i=0;请提供您尝试的详细信息。到目前为止您尝试了什么?您需要存储所有生成的组合并进行检查。如果没有,您可以不重复地生成组合,而无需使用适当的递归函数/算法检查当前集是否已生成。您应该仅在
x
y
!(现在解释一下为什么会发生这种情况)@George请小心问a。一般来说,这是个好主意,但它只适用于“我有这个行为不端的代码”问题。这里的问题更多的是“不知道如何开始”问题。请提供您的尝试的详细说明。到目前为止您尝试了什么?您需要存储所有生成的组合并进行检查。如果没有,您可以使用适当的递归函数/算法生成组合,而无需检查当前集是否已生成。仅当
x
y
!(现在解释一下为什么会发生这种情况)@George请小心问a。一般来说,这是个好主意,但它只适用于“我有这个行为不端的代码”问题。这里的问题更多的是“不知道如何开始”问题。我想知道,与标准的无害冲突是否会让作为家庭作业交给他们的分数降低。@Yunnosch:我猜你得给他们留点事做了。:-)@BobJarvis不可能,如果StackOverflow为某人做作业,那么100%。叹气。参见编辑历史……我想知道,与标准的无害冲突是否会导致将此作为作业交给他们的分数降低。@Yunnosch:我想你得给他们留点事做。:-)@BobJarvis不可能,如果StackOverflow为某人做作业,那么100%。叹气。请参阅编辑历史。。。