![](/img/trans.png)
[英]I need to make a string triangle with for loops taking off one letter of the word each time. Java
[英]I need to make a triforce containing 3 lines of number for each triangle
每行是相同的编号,并且在所有三个三角形中,该编号是相同的。
输入:
- 第一行包含一个整数n,代表要跟随的数据集的数量。
- 每个数据集将由1个整数m组成,该整数表示Triforce of Courage始终包含的数字。
输出:
使用以下模板打印出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;
}
}
}
有许多可能的解决方案来解决此问题。 通常,通常可以使用许多好的策略来解决此问题:
让我们举个例子。 乍一看,我个人将输出分为两半。 顶部由一个三角形组成,底部由两个三角形并排组成。 此外,让我们专注于完全能够绘制一个三角形。 假设我们要在任意位置产生一个三角形:
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
),并且可以在下半循环中简单地添加第二个if
块-相同两个中心的逻辑,都在一个循环中。 我将把它作为练习留给您。
现在,就像我说的那样,有许多可能的解决方案。 选择对您来说最有意义,最容易动手的一种。 实际上,作为一项学习练习,我建议尝试使用至少三种不同的算法来实现该程序。 例如:
if
来实现上述功能(例如,从center - row
到center + row
循环,以及边界的单独循环)-这类似于您当前的方法。 而且当然,
按照承诺,我将发布我的解决方案。 多亏了MR。 贾森(Jason)我能够解决此问题,现在我需要对其从文件中读取数字的位置进行一些细微修改,但我可以轻松理解。
// 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();
}
}}
在下面的代码中, 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.