[英]optimize code to get following output in c
我上周接受了采访。 他们让我写一个这样打印的代码
input :5
0
101
21012
3210123
432101234
54321012345
我写了下面的代码,但他说我可以进一步优化。 我想不通。 ,
int main(){
int n,i,j,k,lim,num;
scanf("%d",&n);//getting input starting number of last row
lim=n;
int collen=n+2;//it denotes end of row
for(i=0;i<n+1;i++)
{
num=i;
k=0;
for(j=0;j<collen-1;j++){
if(j<lim)
printf(" ");
else if(num<0){
printf("%d",++k);
}
else{
printf("%d",num--);
}
}//j for
printf("\n");
collen++;
lim--;
}//i for
}// main end
我第一次尝试有不同的代码,我使用标志来检测 num 何时达到递增和递减,这很复杂,如果在第二个循环内大约有 4 个,所以我将该代码优化为上述代码。 他说你能优化更多吗? 我不知道优化它。
我的问题:可以优化吗?如果可以,请发布代码
这看起来优化到边缘:
int main( int argc, char **argv )
{
puts( "input :5");
puts( " 0");
puts( " 101");
puts( " 21012");
puts( " 3210123");
puts( " 432101234");
puts( "54321012345");
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* Print a pyramid */
int
main(int argc, char **argv)
{
int size = argc > 1 ? strtol(argv[1],NULL,10) : 5;
if( size > 9 || size < 0) {
fprintf(stderr, "Invalid size\n");
return EXIT_FAILURE;
}
for(int line = 0; line <= size; line++) {
char template[]="9876543210123456789";
char *s = template + 9 - size;
template[10 + line] = '\0';
memset(s, ' ', size - line);
if(puts(s) == EOF) {
perror("puts");
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}
<
比较for
循环相比,for 循环更多。 for(i=0;i<n+1;i++)
写得更清楚for (i = 0; i <= n; i++)
。int collen=n+2;
,然后像collen-1
一样使用它,保存减法并对其进行初始化调整。if
s 将这个复杂的内部循环分隔到它们自己的循环中。现在是我的解决方案,但就像你的解决方案一样,它只能处理从 0 到 9 的输入:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n;
printf("input :");
if (scanf("%d", &n) != 1 || n < 0 || n > 9) {
printf("input not recognized or invalid\n");
return EXIT_FAILURE;
}
for (int i = 0; i <= n; ++i) {
printf("%*d", n - i + 1, i);
for (int j = i - 1; j >= 0; --j) {
printf("%d", j);
}
for (int j = 1; j <= i; ++j) {
printf("%d", j);
}
printf("\n");
}
return EXIT_SUCCESS;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.