每一行都是相同的数字,而在所有三个三角形中,数字是相同的。
输入:
- 第一行包含一个整数n,表示要遵循的数据集数。
- 每个数据集将包含1个整数m,表示整个勇气的Triforce包含的数字。
输出:
使用此模板打印出一个小部件(用指定的整数替换0):
0 000 00000 0 0 000 000 00000 00000
假设:要替换的数字将是:0 <= m <= 9
示例输入: 1 2
示例输出:
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;
}
}
}
答案 0 :(得分:7)
这个问题有很多可能的解决方案。一般来说,您通常会使用许多好的策略来解决这个问题:
让我们举个例子吧。一眼就看,我个人将输出分成两半;顶部由一个三角形组成,底部由两个三角形并排组成。此外,让我们专注于能够绘制三角形。假设我们想要在任意位置生成三角形:
11
012345678901
0 x
1 xxx
2 xxxxx
我们注意到三角形位于第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.
}
但是对于下半部分,两个三角形呢?最简单的当然是与上面完全相同,但由于我们有两个三角形,我们有两个中心(比如,centerL
和centerR
),并且可以简单地添加第二个{{1在我们的下半部分循环中阻塞 - 两个中心的逻辑相同,都在一个循环中。我会把这作为练习留给你。
现在,就像我说的,有很多可能的解决方案。选择最适合您的那个,最容易让您满意。事实上,作为一个学习练习,我建议尝试用至少三种不同的算法来实现这个程序。例如:
if
(例如从if
输出到center - row
的循环,并为边框分隔循环) - 这与您当前的方法类似当然,
答案 1 :(得分:2)
正如所承诺的那样,我将发布我的解决方案。感谢MR。杰森我能够解决这个问题,现在我需要稍微修改一下它从文件中读取的数字,但我可以轻松理解。
// By Rexhep Rexhepi
// 11/12/14
// BIG THANKS TO MR. Jason!
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;
int center = 5;
int centerL = 2;
int centerR = 8;
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.
}
for(int rowB = 0; rowB < 3; rowB++)
{
for (int columnL= 0;columnL < 5; columnL++)
{
if (columnL>= centerL - rowB && columnL <= centerL + rowB)
System.out.print("x");
else
System.out.print(" ");
}
for (int columnR = 5; columnR<11; columnR++)
{
if (columnR>= centerR-rowB && columnR <= centerR+rowB)
System.out.print("x");
else
System.out.print(" ");
}
System.out.println();
}
} }
答案 2 :(得分:-3)
在下面的代码triforce(...)
中将打印所需的输出。
public void triforce(int n, int m) {
triangleWithSpaces(2, 1, n, m);
triangleWithSpaces(2, 2, n, m);
}
public void triangleWithSpaces(int s, int t, int n, int m) {
for (int i = 0; i <= n; i++) {
for (int k = 0; k < t; k++) {
for (int j = 0; j < ((n * 2 + 1) / 2 + 1) * (s - t); j++) {
System.out.print(" ");
}
for (int j = n - i; j > 0; j--) {
System.out.print(" ");
}
for (int j = 0; j < i * 2 + 1; j++) {
System.out.print(m);
}
for (int j = n - i; j > 0; j--) {
System.out.print(" ");
}
System.out.print(" ");
}
System.out.println();
}
}
示例运行
triforce(2,0);
0
000
00000
0 0
000 000
00000 00000
triforce(3,9);
9
999
99999
9999999
9 9
999 999
99999 99999
9999999 9999999