C 缩短或拆分代码

C 缩短或拆分代码,c,C,请帮助缩短此函数,以便有25行或更少的行! 它可以打印从0到99的所有可能的数字组合, 例如:00 01,00 02,00 03,00 04,00 05,…,00 99,01 02,…,97 99,98 99 void dp\u print\u comb2(void) { 字符a; 字符b; 字符c; chard; a='0'; b='0'; 而("9") { a++; b='0'; } c=a; 如果(b='9') C++; d=b+1; 如果(b='9') d='0'; 而(c'9') {

请帮助缩短此函数,以便有25行或更少的行! 它可以打印从0到99的所有可能的数字组合,

例如:00 01,00 02,00 03,00 04,00 05,…,00 99,01 02,…,97 99,98 99

void dp\u print\u comb2(void)
{
字符a;
字符b;
字符c;
chard;
a='0';
b='0';
而("9")
{
a++;
b='0';
}
c=a;
如果(b='9')
C++;
d=b+1;
如果(b='9')
d='0';
而(c'9')
{
C++;
d='0';
}
}
b++;
}
}
因此,如果有一种方法来分割这个函数或缩短,请帮助我!谢谢

如果主功能和其他功能是需要的,我可以把他们也

ps:我开始学习C语言,并进行了一些练习!(抱歉英语不好)

void dp\u print\u comb2(void){
对于(int ab=0;ab<100-1;++ab)
对于(int-cd=ab+1;cd<100;++cd)
printf(“%02d%02d,”,ab,cd);
认沽权(“”);
}

如果你想让你的代码更短,可以做一个循环(未测试,但应该可以工作)

void foo(){
对于(int i=0,j=0;j 0),j是递增的
  • (循环100到199)每个循环i递增。当i!=0 j时,保持恒定(=1)
  • 等等
  • PS1:它不会更快,使用两个循环也不太清楚,但它展示了一种不同的方法来做同样的事情


    PS2:甚至可以只使用一个变量(但更不清楚…。

    从您的示例中,当数字相同时,不要打印它们

    您的问题不清楚是否存在任何其他限制

    这是我将使用的代码:

    #include <stdio.h>
    
    #define MAX_PLUS_ONE (100)
    
    // prototype
    void    dp_print_comb2( void )
    
    void    dp_print_comb2()
    {
        for( unsigned ab=0; ab < MAX_PLUS_ONE; ab++)
        {
            for( unsigned cd=0; cd < MAX_PLUS_ONE; cd++)
            {
                if( ab != cd )
                { // then numbers are not the same
                    printf( "%02u %02u, ", ab, cd);
                } // end if
            } // end for
        } // end for
    } // end function: db_print_comb2
    
    #包括
    #定义最大值加一(100)
    //原型
    作废dp\U打印\U组合2(作废)
    无效dp_打印_组合2()
    {
    for(无符号ab=0;ab
    只是表面上,如果你真的只是想减少代码行数(而不是简单地删除换行代码):你有两种情况,在这两种情况下,你用
    d=b+1
    检查
    d=b+1
    不受第一次检查的影响,因此你可以将那些
    if
    语句组合起来。另外,
    d++;if(d>'9')
    可以组合为
    if(++d>'9'))
    a='0';b='0';
    可以写成
    a=b='0';
    字符a;字符b;字符c;字符d;
    可以缩短为
    字符a,b,c,d;
    。代码中的许多其他结构可以通过连接行以类似的方式缩短。您可以替换
    a='0';b='0';而(a)虽然这个代码可能有助于解决这个问题,但提供附加的上下文来解释为什么和/或它如何回答这个问题将显著地提高它的长期价值。请回答你的一些解释。TL;Dr.,没有一个特殊的问题,表明它可以在一个简单的循环中。这个问题从D中选择两个元素。ata[n]。第一个元素选择索引0..n-1,第二个元素不选择第一个元素已经选择的索引。它可以简单地用两个循环表示。因此
    for(first_index=0;ab
    。顺便说一句,在这种情况下,索引和内容是相同的。1)
    inti=0,intj=0
    :它不能被编译。2)OP的示例不包括重叠的组合。例如(00,00),(99,99)(可能还有(04,05)(05,04))@BLUEPIXY
    int i=0,int j=0
    :它不能被编译,可以用标准兼容的编译器编译。@BLUEPIXY是的,有一点疏忽错误…被编辑了!如果他不想要01 10,他可以用j=i+1初始化。不,不。对不要重叠。(第一个数字!=第二个数字:(00,00)是NG,如果(04,05)已经打印,(05,04)是NG,因为它被复制为一对)当你投反对票时,总是包括一条关于你为什么投反对票的评论。另外,没有人知道任何事情
    void dp_print_comb2(void){
        for(int ab = 0; ab < 100-1; ++ab)
            for(int cd = ab + 1; cd < 100; ++cd)
                printf("%02d %02d, ", ab, cd);
        puts("");
    }
    
    void foo(){
        for(int i=0,j=0;j<100;i=(i+1)%100,j+=!i)
            printf("%02d %02d,",i,j);
    }
    
    #include <stdio.h>
    
    #define MAX_PLUS_ONE (100)
    
    // prototype
    void    dp_print_comb2( void )
    
    void    dp_print_comb2()
    {
        for( unsigned ab=0; ab < MAX_PLUS_ONE; ab++)
        {
            for( unsigned cd=0; cd < MAX_PLUS_ONE; cd++)
            {
                if( ab != cd )
                { // then numbers are not the same
                    printf( "%02u %02u, ", ab, cd);
                } // end if
            } // end for
        } // end for
    } // end function: db_print_comb2