【问题标题】:How to add an output for each number input?如何为每个数字输入添加输出?
【发布时间】:2019-10-10 13:26:41
【问题描述】:

我的任务是编写一个短程序,允许输入 1-50 的数字,然后从该数字中用星号组成的三角形将输出那么多层楼高。例如, 输入 2 将输出一个 * 三角形,顶部有一个 *,底部有第二行两个 * 输入 3 将输出一个 * 三角形,顶部有一个 *,中间有第二行两个 *,然后底部有第三行三个 *,依此类推。 我知道一种方法可以通过为每个数字 1-50 制作一个嵌套的 if 门来做到这一点,但我想知道是否有更有效的方法来做到这一点?

我知道一种方法可以通过为每个数字 1-50 制作一个嵌套的 if 门来做到这一点,但我想知道是否有更有效的方法来做到这一点?

#include <stdio.h>
#include <stdlib.h>
int main(void) 
{
    //gather user input
int triNum;
char a;
scanf("%i", &triNum);
    //make sure input is <= 50
if(triNum <= 50)
{
    if(triNum == 1)
    {
        printf("*");
    }
    if (triNum == 2)
    {
        a = '*';
        printf("*\n");
        printf("*%c\n", a);
    }
}
    return 0;
}

在对每个单独的数字进行编码时,没有实际的错误消息,我只是想知道一种更有效的方法吗?

【问题讨论】:

    标签: c counter draw


    【解决方案1】:

    您可能会想要为此使用循环,如下面的程序所示。那么你就不需要单独对待每个案例了。

    #include <stdio.h>
    
    int main(void)
    {
        int h, i, j;
    
        printf("What is the height of the triangle? ");
        scanf("%d", &h);
    
        for (i = 0; i < h; ++i) {
            for (j = 0; j <= i; ++j)
                printf("*");
            printf("\n");
        }
    
        return 0;
    }
    

    对于给定的高度h,此程序循环遍历h 行,并在每一行中输出h 星号字符。例如,h 占用 1、2、3 和 5,输出如下所示。

    What is the height of the triangle? 1
    *
    
    What is the height of the triangle? 2
    *
    **
    
    What is the height of the triangle? 3
    *
    **
    ***
    
    What is the height of the triangle? 5
    *
    **
    ***
    ****
    *****
    

    【讨论】:

    • 同意,我也会使用两个 for 循环。当然,这是可怕的规模,但这就是这项任务的本质。
    • @DennisB 单循环替代方案是从一个空字符串(字符数组)开始,然后在每次迭代中再追加一个*,并在每一步打印出这个字符串。
    • @guatgr 最终将与使用 2 个循环相同。
    • @kiranBiradar 你是对的,printf 在这种情况下应该是 O(n)。
    猜你喜欢
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多