C 如何将此函数代码减少到最多25行?
出于某种原因,我需要将函数的长度减少到最多25行 我只能使用write函数 我不能用它 我不能在同一行中执行多个操作示例a[0]=0;a[1]=1;a[2]=2 我无法删除当前换行符 我不能在同一行中声明和分配变量 包含{或}的行应仅包含{或} 这是我下班后想到的最小的代码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
#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';很好地使用了复合文字。