首页 > 解决方案 > C:散列金字塔模式

问题描述

我需要一个打印下面图案的程序。程序必须从用户那里读取行数。

示例 1:

输入: 3

输出:

#
##
####

示例 2:

**输入:** 5

输出

#
##
####
#######
###########

我到目前为止的代码:

#include <stdio.h>

int main(int argc, char const *argv[])
{
   int n;
   scanf("%d", &n);
   int step = n;
   for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j+=step) {
         printf("#");
      }
      step--;
      puts("");
   }
   return 0;
}

标签: calgorithmfor-loop

解决方案


据我从您的示例中可以看出,模式是:

第 0 行:1 #

第 1 行:2 #(即 1 + 1 或“上一行的 # 号 + 本行号”)

第 2 行:4 #(即 2 + 2 或“上一行的 # 号 + 本行号”)

第 3 行:7 #(即 4 + 3 或“上一行的 # 号 + 本行号”)

因此,您可以在代码中使用“上一行中的# 数+ 本行号”作为模式来查找当前行中所需的# 数。就像是:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int n;
    scanf("%d", &n);
    int limit = 1;                      // Limit for line 0
    for (int i = 0; i < n; i++) {
        limit += i;                     // Calculate limit for this line
        for (int j = 0; j < limit; ++j) {
            printf("#");
        }
        puts("");
    }
    return 0;
}

n=7 的输出:

#
##
####
#######
###########
################
######################

推荐阅读