C 如何将此函数代码减少到最多25行?

C 如何将此函数代码减少到最多25行?,c,C,出于某种原因,我需要将函数的长度减少到最多25行 我只能使用write函数 我不能用它 我不能在同一行中执行多个操作示例a[0]=0;a[1]=1;a[2]=2 我无法删除当前换行符 我不能在同一行中声明和分配变量 包含{或}的行应仅包含{或} 这是我下班后想到的最小的代码 #include <unistd.h> void ft_print_comb(void) { int a[3]; a[0] = 0; a[1] = 1; a[2] = 2

出于某种原因,我需要将函数的长度减少到最多25行

我只能使用write函数

我不能用它

我不能在同一行中执行多个操作示例a[0]=0;a[1]=1;a[2]=2

我无法删除当前换行符

我不能在同一行中声明和分配变量

包含{或}的行应仅包含{或}

这是我下班后想到的最小的代码

#include <unistd.h>

void    ft_print_comb(void)
{
    int a[3];

    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    while (a[0] < 8)
    {
        if (a[2] > 9)
        {
            a[2] = 0;
            a[1] = a[1] + 1;
        }
        if (a[1] > 9)
        {
            a[1] = 0;
            a[0] = a[0] + 1;
        }
        if (a[0] < a[1] && a[1] < a[2])
        {
            write(1, &a[0], 1);
            write(1, &a[1], 1);
            write(1, &a[2], 1);
            write(1, ", ", 1);
        }
        a[2] = a[2] + 1;
    }
}
代码应执行以下操作:

编写一个函数,以升序显示所有不同的升序数字组合-是的,重复是自愿的

像这样的

#include <unistd.h>

void pnum(int num)
{
    char digs[4];
    digs[0] = (num/100) + '0';
    digs[1] = (num % 100)/10 + '0';
    digs[2] = (num % 10) + '0';
    digs[3] = '\n';
    if ((digs[0] < digs[1]) && (digs[1] < digs[2]))
        write(1, digs, 4);
}

int main()
{
    int a;
    a=0;
    while (a++ < 1000)
    {
        pnum(a);
    }
}

注意:学习分解需求,并将其分块实施。我看到的分解是:1按升序生成所有组合。2按升序显示数字。这就是为什么我写这篇文章分为两部分。

你确定你写的是什么吗?因为你有一个int a[3]数组,但是你写的是1,它应该是int的大小,所以如果这是你的错误,我已经做了一些调整

void    ft_print_comb(void)
{
    char a[3] = {'0','1','2'};

    while (a[0] < '8')
    {
        if (a[2] > '9')
            a[2] = '0',
            a[1] = a[1] + 1;
        if (a[1] > '9')
            a[1] = '0',
            a[0] = a[0] + 1;
        if (a[0] < a[1] && a[1] < a[2])
            write(1, a, 3),
            write(1, ", ", 1);
        a[2] = a[2] + 1;
    }
}
八行就够了:

#include <unistd.h>

int main(void)
{
    int i;
    i = 0;
    while (++i < 1000)
        if (i/100 < i/10%10 && i/10%10 < i%10)
            write(1, (char []) { '0' + i/100, '0' + i/10%10, '0' + i%10, '\n'}, 4);
}

一个人可以通过改变int i使其变为7;i=0;到静态int i;,依靠静态初始化将i初始化为零。

或int a[]={0,1,2};。这段代码应该做什么?这是家庭作业吗?我想和你的导师谈谈;。可读性比行数更重要。无论如何,这段代码有一个预定的输出。你可以简单地按原样运行它,得到这个输出,然后编写另一个程序打印它,而不进行任何计算。像这样的作业在教学上相当于hazing。哇,原来代码很混乱,因为OP在做什么,而不是他需要遵循的规则。有趣的是,最后一次迭代调用pnum1000,然后挖掘[0] = 10 + '0';很好地使用了复合文字。