我正在研究一个可选的测试审查问题,以介绍C类,我需要有一个程序,打印出以下基于用户输入的数字:

Enter a number: 5
     5
    44
   333
  2222
 11111
000000
 11111
  2222
   333
    44
     5

到目前为止这是我写的代码
#include <stdio.h>
int main(void){
   int row,column,space;
   int number;

   printf("Enter a number: ");
   scanf_s("%d",&number);

   for (row = 1; row <= number + 1; row++){
    for (space = number; space >=row; space--){
        printf(" ");
    }
    for(column = 1;column <= row; column++){
        printf("%d",space);
    }
    printf("\n");
   }
   for (row = 1; row <=number;row++){
    for(space = 1;space <= row;space++){
        printf(" ");
    }
    for(column = number;column >=row;column--){
        printf("%d",space);
    }
    printf("\n");
  }
  return 0;
}

这是我得到的输出
Enter a number: 5
     0
    11
   222
  3333
 44444
555555
 22222
  3333
   444
    55
     6

我花了好几个小时试图找出如何使用用户输入的数字打印半个菱形的上半部分,但我似乎无法找到答案。有人能给我指个正确的方向吗?

最佳答案

你的电话号码有点少,请更正printf呼叫,就完成了:
第一个:

printf("%d", number - space);

第二个:
printf("%d", space - 1);

一个稍微好一点(可读性更强,逻辑性更强)的方法是使用其他变量:
第一个:
printf("%d", number + 1 - row);

第二个:
printf("%d", row);

还要注意,一些基础数学可以帮助您实现以下目标:
总行数:2 * number + 1
空格数:5、4、3、2、1、0、1、2、3、4、5=>abs(number - row)(如果以0开始行)
要打印的数字:与“空格数”相同
数字计数:1、2、3、4、5、6、5、4、3、2、1=>6 - number_of_spaces
这提供了一个更清晰、更可读的版本,只有一个循环:
#include <stdio.h>
#include <math.h>

int main(void){
   int row,column,space;
   int number;

   printf("Enter a number: ");
   scanf_s("%d",&number);

   for (row = 0; row <= number * 2; row++){
    int number_of_spaces = abs(number - row);
    int number_to_print = number_of_spaces;
    int number_count = 6 - number_of_spaces;
    for (space = 1; space <= number_of_spaces; space++){
        printf(" ");
    }
    for(column = 1;column <= number_count; column++){
        printf("%d", number_to_print);
    }
    printf("\n");
   }
  }
  return 0;
}

关于c - 用C编程倒金字塔,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28623782/

10-16 14:28