我需要为每个三角形制作一个包含3行数的三元组

Rex*_*hep 2 java println

每一行都是相同的数字,在所有三个三角形中,数字是相同的.

输入:

  • 第一行包含一个整数n,表示要遵循的数据集的数量.
  • 每个数据集将包含1个整数m,表示Triforce of Courage始终包含的数字.

输出:

使用此模板打印出一个小部件(用指定的整数替换0):

     0
    000
   00000
  0     0
 000   000
00000 00000
Run Code Online (Sandbox Code Playgroud)

假设:要替换的数字为:0 <= m <= 9

样本输入:1 2

样本输出:

     2
    222
   22222
  2     2
 222   222
22222 22222
Run Code Online (Sandbox Code Playgroud)

以下是我到目前为止的代码:

import java.lang.Math;
import java.util.Scanner;
import java.io.*;
import java.util.*;
import java.io.FileNotFoundException;

public class TriforceOfCourage {
     public static void main(String[] args) throws FileNotFoundException {
        Scanner scan=new Scanner(new File("num.dat"));
        int n = scan.nextInt();
        int count = 0;
        while(count<n) {
            for (int i=0; i<3; i++) {
                for (int k=0; k<3-i; k++) {
                    System.out.print(" ");
                }
                for (int j=0; j<i*2+1; j++) {
                    System.out.print(n);
                }
                System.out.println("");
            }
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*n C 7

这个问题有很多可能的解决方案.通常,您通常会使用许多好的策略来解决这个问题:

  1. 寻找一种模式.你能找到一种可以通过逻辑和代数运算轻松表达的模式吗?
  2. 问题可以分解为更小,更易于管理的部分吗?有时看似复杂的问题可以分成更小,更简单的问题.
  3. 如有疑问,请在纸上解决问题.

让我们举个例子吧.一眼就看,我个人将输出分成两半; 顶部由一个三角形组成,底部由两个三角形并排组成.此外,让我们专注于能够绘制三角形.假设我们想要在任意位置生成三角形:

            11
  012345678901
 0       x
 1      xxx
 2     xxxxx
Run Code Online (Sandbox Code Playgroud)

我们注意到三角形位于第7列的中心,我们怀疑如果我们可以在任何列中绘制一个三角形,它将帮助我们,所以让我们center成为三角形的中心列.许多这些类型的策略涉及提出一种参数化问题的方法.对于这种方法,我们希望找到这个问题的答案:

  • 鉴于row,columncenter,我们应该在该位置画一个角色吗?

让我们先采用一种简单的代数方法,一次一行,看看我们是否注意到任何模式:

  • row == 0:这里我们只输出column == center.
  • row == 1:这里我们输出的时候column >= center - 1 && column <= center + 1.
  • row == 2:这里我们输出的时候column >= center - 2 && column <= center + 2.

注意一个模式?想想它一秒钟.认识到这实际上row == 0不是一个特例,模式是:

  • 输出时column >= center - row && column <= center + row.

大!现在我们可以很容易地输出一个三角形:

int center = 7; // From our example.

for (int row = 0; row < 3; ++ row) {
    for (int column = 0; column < 11; ++ column) {
        if (column >= center - row && column <= center + row)
            System.out.print("x"); // Replace with whatever character to print.
        else
            System.out.print(" ");
    }
    System.out.println(); // Line break after each row, of course.
}
Run Code Online (Sandbox Code Playgroud)

但是对于下半部分,两个三角形呢?最简单的当然是完成与上面完全相同的操作,但由于我们有两个三角形,我们有两个中心(比如说,centerLcenterR),并且可以简单地if在我们的下半部分循环中添加第二个块 - 两者都是相同的逻辑所有中心都在一个循环中.我会把这作为练习留给你.

现在,就像我说的,有很多可能的解决方案.选择最适合您的那个,最容易让您满意.事实上,作为一个学习练习,我建议尝试用至少三种不同的算法来实现这个程序.例如:

  • 遍历所有6行(而不是上半部分和下半部分)并将所有3个三角形放在同一个循环中.
  • 创建一个2D数组并将三角形绘制其中,然后输出内容.
  • 尝试实现上述内容而不使用if(例如循环输出center - rowcenter + row,并为边框分开循环) - 这与您当前的方法类似.
  • 尝试创建一个可以绘制任何高度三角形的方法,而不仅仅是3.
  • 尝试创建一个可以绘制任何 "三角形三角形"的方法,例如3,4,5行三角形.

而且当然,

在此输入图像描述

  • 有趣的方式来解释问题的解决方案.图像真棒:D (2认同)