Java 打印数字三角形
这里是CS学生。我刚刚收到一篇关于循环的介绍,我不确定我是否非常了解它们。我试着打印一个三角形的数字Java 打印数字三角形,java,loops,Java,Loops,这里是CS学生。我刚刚收到一篇关于循环的介绍,我不确定我是否非常了解它们。我试着打印一个三角形的数字n,这样如果n=4你会得到这样的结果: 4 3 7 2 6 9 1 5 8 10 相反,我的结局是: 4 3 5 只要说我迷路就够了。这是我的密码: void drawT3 (int n) { int k = 1; int t = 1; for (int i=1;i<=n;i++) {
n
,这样如果n=4
你会得到这样的结果:
4
3 7
2 6 9
1 5 8 10
相反,我的结局是:
4
3 5
只要说我迷路就够了。这是我的密码:
void drawT3 (int n)
{
int k = 1;
int t = 1;
for (int i=1;i<=n;i++)
{
k = n;
int j;
for (j=1;j<=n-i;j++)
System.out.print(" ");
for (j=1;j<=t;j++)
{
System.out.printf("%3d",k);
k += (n - j);
}
n--;
t++;
System.out.println();
}
}
void drawT3(int n)
{
int k=1;
int t=1;
对于(int i=1;i
根据需要在数字周围留出空格
PS:我不会建议使用数组编写任何模式代码,除非它非常复杂。数组将使用额外的内存空间。void printTriangle(int n)
void printTriangle(int n)
{
// build an auxiliary 2D array
final int t[][] = new int[n][n];
int i = 1;
for (int s = n - 1; s <= 2 * (n - 1); s++)
{
for (int x = s - n + 1; x < n; x++)
{
t[x][s - x] = i++;
}
}
// print the array
for (int y = 0; y < n; y++)
{
for (int x = 0; x < n; x++)
{
if (t[x][y] > 0)
{
System.out.printf("%3d", t[x][y]);
}
else
{
System.out.printf(" ");
}
}
System.out.println(); // start new line
}
}
{
//构建辅助二维阵列
最终整数t[][]=新整数[n][n];
int i=1;
对于(int s=n-1;s 0)
{
System.out.printf(“%3d”,t[x][y]);
}
其他的
{
System.out.printf(“”);
}
}
System.out.println();//开始新行
}
}
构建大小为n
的辅助二维数组
按照人类的意愿将数字放入数组中,从1到n,紧跟在对角线之后。代码中的s
表示x+y
和。每个对角线的和都是常量。在第一条对角线(最长的一条)中,和等于n-1
。在第二条对角线中,和多1条,n
。在最后一条“对角线”中(右下角)和是2*(n-1)
。这正是我们的循环:for(int s=n-1;spublicstaticvoidmain(String[]args){
//此处的TODO代码应用程序逻辑
三角形(4);
}
静态公共空间三角形(int n){
int x=0;
对于(int i=n;i>0;i--){
系统输出打印(i+“”);
x=i+n;
对于(int j=0;j请注意,有许多方法可以打印出如上所述的三角形数字,例如,这里有两种
// for n=5,
// 1 2 3 4 5
// 6 7 8 9
// 10 11 12
// 13 14
// 15
及
因为递归很有趣!
类三角形
{
//使用递归,
静态整数rowUR(整数计数、整数开始、整数深度)
{
int-ndx;
如果(count那么你已经发布了n=4的预期输出,但是你发布了n=2的实际输出?@SamIam我认为这是他对n=4
的实际输出。看看这个:n--;
这将对n=4
运行两次。如果我是你,我会制作一个2d数组来表示你的输出,并填充所有应该有空白的地方使用-1
,然后我会系统地打印数组的内容。填充每个值,直到它需要3个空格才能打印。这样,如果第一年我遇到这样的循环,你就不必处理如此复杂的逻辑(而且在以前的课程中还没有表现出对语言的清晰掌握)我想知道他是从哪里复制来的。这甚至有逗号列表初始化,这在java中并不流行,并且意味着有人可能学会了用较旧的语言编写代码。所以复制时要小心!!
void printTriangle(int n)
{
// build an auxiliary 2D array
final int t[][] = new int[n][n];
int i = 1;
for (int s = n - 1; s <= 2 * (n - 1); s++)
{
for (int x = s - n + 1; x < n; x++)
{
t[x][s - x] = i++;
}
}
// print the array
for (int y = 0; y < n; y++)
{
for (int x = 0; x < n; x++)
{
if (t[x][y] > 0)
{
System.out.printf("%3d", t[x][y]);
}
else
{
System.out.printf(" ");
}
}
System.out.println(); // start new line
}
}
public static void main(String[] args) {
// TODO code application logic here
triangle(4);
}
static public void triangle(int n){
int x = 0;
for (int i = n;i>0;i--){
System.out.print(i + " ");
x = i+n;
for (int j=0;j<n-i;j++){
System.out.print(x - j + " ");
x = x + n -j;
}
System.out.println("");
}
}
// for n=5,
// 1 2 3 4 5
// 6 7 8 9
// 10 11 12
// 13 14
// 15
// 5
// 4 9
// 3 8 12
// 2 7 11 14
// 1 6 10 13 15
class triangle
{
//Use recursion,
static int rowUR( int count, int start, int depth )
{
int ndx;
if(count<=0) return start;
//-depth?
for (ndx=0;ndx<depth;ndx++)
{
System.out.print(" ");
}
//how many? 5-depth, 5,4,3,2,1
for( ndx=0; ndx<count; ++ndx )
{
System.out.printf("%3d",start+ndx);
}
System.out.printf("\n");
if( count>0 )
{
rowUR( count-1, ndx+start, depth+1 );
}
return ndx;
}
//Use recursion,
static int rowLR( int count, int start, int depth )
{
int ndx, accum;
if( start < count )
rowLR( count, start+1, depth+1 );
for( ndx=0; ndx<depth; ++ndx )
{
System.out.print(" ");
}
accum=start;
//how many? 5-depth, 1,2,3,4,5
for( ndx=0; ndx<(count-depth); ++ndx )
{
System.out.printf("%3d",accum);
accum+=count-ndx;
}
System.out.printf("\n");
return ndx;
}
public static void main(String[] args)
{
int count=4, depth=0, start=1;
System.out.printf("rowUR\n");
rowUR( count=5, start=1, depth=0 );
System.out.printf("rowLL\n");
rowLL( count=5, start=1, depth=0 );
}
};