首页 > 解决方案 > 使用单个 for 循环打印右对齐 # 楼梯案例

问题描述

我想打印一个右对齐的 # Staircase 与单循环。

我试图打印一个右对齐的 # 楼梯。
我做的。但我想用单循环打印相同的内容。

for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    {
        if(i+j>=n-1)
        {
          printf("#");
        }
        else
        {
          printf(" ");
        }
    }
    printf("\n");
}

标签: c

解决方案


长话短说:有很多方法可以做到这一点。这里有一些我的想法。

递归:

void print(int n, int j) {
    if (j < n) {
        for (int i = 0; i < n; i++) {
            putchar(i + j >= n - 1 ? '#' : ' ');
        }

        puts("");
        print(n, j + 1);
    }
}

int main() {
    print(10, 0);
    return 0;
}

memset

#include <stdio.h>
#include <string.h>

int main() {
    int i, n = 10;
    char s[n+1];
    memset(s, ' ', sizeof(char) * (n + 1));

    for (i = 0; i <= n; i++) {
        memset(s + n - i, '#', sizeof(char) * (n + 1 - i));
        s[n+1] = '\0';
        printf("%s\n", s);
    }

    return 0;
}

循环n * n并使用条件来确定何时打印新行:

int main() {
    int i, j, n = 10;

    for (i = 0, j = 0; i <= n * n; i++) {
        putchar(j++ >= n - 1 ? '#' : ' ');

        if (i % n == 0) {
            puts("");
            j = i / n;
        }
    }

    return 0;
}

goto

int main() {
    int i = 0, j, n = 10;

    loop:
    for (j = 0; j <= n; j++) {
        putchar(j++ >= n - 1 ? '#' : ' ');
    }

    puts("");
    if (i++ < n) goto loop;

    return 0;
}

推荐阅读