C 缩短或拆分代码
请帮助缩短此函数,以便有25行或更少的行! 它可以打印从0到99的所有可能的数字组合, 例如:00 01,00 02,00 03,00 04,00 05,…,00 99,01 02,…,97 99,98 99C 缩短或拆分代码,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') {
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))@BLUEPIXYint 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