用一个环绘制三角形(修订)

时间:2014-12-04 13:40:06

标签: c geometry

三角形看起来应该是这样的

1
11
111
1111
11111
111111

用户输入的行数然后转换为该函数 注意:没有数组,必须有一个循环(while或for)而不是嵌套循环

我得到的最接近的是一个带有2个循环的代码(但是不能考虑如何用更少的循环来实现)

int i,k;
    for(i=1;i<=x;i++)
    {
        for(k=1;k<=i;k++)
        {
            printf("1");
        }
        printf("\n");
    }

以上问题是有人问的,但是它被标记为偏离主题我不知道为什么......? 我想出了这个解决方案告诉我它是否正确?

int i=1,k=1;
    while (i<=x)
    {
        if(k<=i)
        {
            printf("1");
     k++;
     continue;
        }
   i++;
  k=1;
        printf("\n");
    }

感谢

2 个答案:

答案 0 :(得分:1)

您可以使用递归替换循环(迭代),尝试此操作(使用一个循环):

#include <stdio.h>

void draw(int depth)
{
    int i;
    if(depth <= 0) return;
    draw(depth-1);
    for(i = 0; i < depth; i++)
        printf("1");
    printf("\n");
}

int main()
{
    draw(5);
    return 0;
}

即使没有循环也可以做到

#include <stdio.h>

void draw_num_char(int num)
{
    if(num <= 0) return;
    printf("1");
    draw_num_char(num-1);
}
void draw(int depth)
{
    int i;
    if(depth <= 0) return;
    draw(depth-1);
    draw_num_char(depth);
    printf("\n");
}

int main()
{
    draw(5);
    return 0;
}

答案 1 :(得分:1)

递归解决方案,一个循环,没有数组。

#include <stdio.h>

void liner(int line, int limit) {
    int i;
    if (line > limit)
        return;
    for(i=1; i<=line; i++)
        printf("1");
    printf("\n");
    liner (line + 1, limit);
}

int main() {
    int limit;
    printf ("Enter number of lines ");
    scanf ("%d", &limit);
    liner (1, limit);
    return 0;
}