每一行都是相同的数字,在所有三个三角形中,数字是相同的.
输入:
- 第一行包含一个整数n,表示要遵循的数据集的数量.
- 每个数据集将包含1个整数m,表示Triforce of Courage始终包含的数字.
输出:
使用此模板打印出一个小部件(用指定的整数替换0):
Run Code Online (Sandbox Code Playgroud)0 000 00000 0 0 000 000 00000 00000假设:要替换的数字为:0 <= m <= 9
样本输入:1 2
样本输出:
Run Code Online (Sandbox Code Playgroud)2 222 22222 2 2 222 222 22222 22222
以下是我到目前为止的代码:
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)
这个问题有很多可能的解决方案.通常,您通常会使用许多好的策略来解决这个问题:
让我们举个例子吧.一眼就看,我个人将输出分成两半; 顶部由一个三角形组成,底部由两个三角形并排组成.此外,让我们专注于能够绘制三角形.假设我们想要在任意位置生成三角形:
11
012345678901
0 x
1 xxx
2 xxxxx
Run Code Online (Sandbox Code Playgroud)
我们注意到三角形位于第7列的中心,我们怀疑如果我们可以在任何列中绘制一个三角形,它将帮助我们,所以让我们center成为三角形的中心列.许多这些类型的策略涉及提出一种参数化问题的方法.对于这种方法,我们希望找到这个问题的答案:
row,column和center,我们应该在该位置画一个角色吗?让我们先采用一种简单的代数方法,一次一行,看看我们是否注意到任何模式:
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)
但是对于下半部分,两个三角形呢?最简单的当然是完成与上面完全相同的操作,但由于我们有两个三角形,我们有两个中心(比如说,centerL和centerR),并且可以简单地if在我们的下半部分循环中添加第二个块 - 两者都是相同的逻辑所有中心都在一个循环中.我会把这作为练习留给你.
现在,就像我说的,有很多可能的解决方案.选择最适合您的那个,最容易让您满意.事实上,作为一个学习练习,我建议尝试用至少三种不同的算法来实现这个程序.例如:
if(例如循环输出center - row到center + row,并为边框分开循环) - 这与您当前的方法类似.而且当然,
