缩短或拆分代码

时间:2016-08-01 12:08:32

标签: c

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

EX:00 01,00 02,00,000 04,00 05,...,00 99,01 02,...,97 99,98 99

void    dp_print_comb2(void)
{
    char    a;
    char    b;
    char    c;
    char    d;

    a = '0';
    b = '0';
    while (a <= '9')
    {
        if (b > '9')
        {
            a++;
            b = '0';
        }
        c = a;
        if (b == '9')
            c++; 
        d = b + 1;
        if (b == '9')
            d = '0';
        while (c <= '9')
        {
            ok(a, b, c, d);
            d++;
            if (d > '9')
            {
                c++;
                d = '0';
            }
        }
        b++;
    }
}

所以如果有办法分割这个功能或缩短请帮助我!谢谢!

如果需要主功能和其他功能,我也可以给它们!

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

3 个答案:

答案 0 :(得分:0)

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("");
}

答案 1 :(得分:-1)

如果你想让你的代码甚至更短,可以进行一次循环(未经测试但应该有效)。

void foo(){
    for(int i=0,j=0;j<100;i=(i+1)%100,j+=!i)
        printf("%02d %02d,",i,j);
}

如何运作

  • i和j初始化为0
  • (循环0到99)每个循环i递增。因为i!= 0 j保持不变(= 0)
  • (循环100)i返回0(n%n - > 0)并且j递增
  • (循环100至199)每个循环i递增。因为我!= 0 j保持不变(= 1)
  • 依旧......

PS1:它不会更快,并且使用两个循环不太清楚,但它显示了一种不同的方式来做同样的事情。

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

答案 2 :(得分:-1)

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

您的问题不清楚任何其他限制。

这是我将使用的代码:

#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