我正在努力产生以下结果:
POST
如您所见,每行增加80,每行中连续数字之间的差异为i * 2(其中i行号以0开头)
我已经写下了这段代码,实际上是这个结果:
120
200 202
280 284 288
360 366 372 378
440 448 456 464 472
520 530 540 550 560 570
600 612 624 636 648 660 672
680 694 708 722 736 750 764 778
760 776 792 808 824 840 856 872 888
但是,这段代码真的很长。你可以看到我每次都加80。有没有办法可以添加另一个永远的循环呢?还添加了2s?
由于
答案 0 :(得分:3)
未经测试,仅使用我的大脑:
for(int i=0;i<input;i++){
int firstNumber = 120+80*i;
for(int j=0;j<=i;j++){
System.out.print(firstNumber+2*i*j); //optimalization firstNumber+(i*j<<1)
}
System.out.println();
}
编辑输入
input
变量是行数
您可以从命令行传递变量作为参数,例如:
public static void main(String[] args){
int input=5; //default value
try{
input=Integer.valueOf(args[0]); //trying to get integer from command line
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Missing parameter");
}catch(Exception e){
System.out.println("First parameter is not an integer");
}
//input variable is now parameter or 5 by default
for(int i=0;i<=input;i++){
int firstNumber = 120+80*i;
for(int j=0;j<i;j++){
System.out.print(firstNumber+2*i*j);
}
System.out.println();
}
}
编辑解释
第一个数字在第一列中是变量,如果您按i
变量计数,您将看到以下序列:
120, 200, 280, 360, 340, ...
这是第一栏。
然后,您应该解决下一列,如您所见,在每一行中,每个中的差异为+2,每列中的差异为+2,因此2*i*j
解决了这个问题
答案 1 :(得分:2)
public class Triangle {
public static void main(String [] args) {
int base_int = 40;
for (int row = 1; row < 10; row++) {
for (int col = 0; col < row; col++) {
int result = base_int + (80 * row) + (2 * (row - 1) * col);
System.out.print(result);
System.out.print(" ");
}
System.out.println();
}
}
}
答案 2 :(得分:2)
尝试将问题分解为单独的部分,例如
print N lines
in each line print M values
这样的循环看起来或多或少像
for (int line = 1 ; line <= N; line++){
for (int position = 1; position <= M; position++){
print(calculateFor(line, position));
}
printLineSeparator;
}
(我开始从1
建立索引,但您应该习惯于从0
建立索引,因此请考虑将这些循环重写为for (int x = 0; ...)
作为家庭作业
现在我们的问题是根据line
号及其position in line
来计算正确值。
让我们从确定每一行中第一个值的公式开始
我们可以很容易地计算它,因为它是线性函数f(line)=...
我们知道
x | 1 | 2 | 3 |
----+-----+-----+-----+ .....
f(x)| 120 | 200 | 280 |
所以在应用了一些数学后
{120 = a*1 + b
{200 = a*2 + b
我们可以确定f(line)
是80 * line + 40
。
现在我们需要找出其余元素的公式
这很容易,因为我们知道它增加了2
,这意味着它的形式为firstValue + 2*(positionInLine -1)
现在最后一个问题是如何确定每行应打印多少个值?
如果仔细查看数据,您会看到每行包含与行号相同的值。因此,我们应该继续按行position<=line
继续打印值。
所以我们的最终解决方案看起来像
for (int line = 1; line <= 9; line++) {
int firstValueInCurrentLine = 80 * line + 40;
for (int position = 1; position <= line; position++) {
System.out.print(firstValueInCurrentLine + 2 * (position -1) + " ");
}
System.out.println();
}
答案 3 :(得分:0)
for (int i = 0, m = 120; i < 9; ++i, m += 80) {
for (int j = 0, s = i + i, n = m; j <= i; ++j, n += s)
System.out.print(n + " ");
System.out.println();
}