Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套for循环打印多少次';y';?_Java - Fatal编程技术网

Java 嵌套for循环打印多少次';y';?

Java 嵌套for循环打印多少次';y';?,java,Java,我已经看了这个例子有一段时间了,我被困住了,我的问题是这个陈述有多少次: System.out.println(y); 将在以下代码中执行: for(int x=0;x<N;x++){ for(int y=x;y<N;y++){ System.out.println(y); } } for(intx=0;x是的,它是N+(N-1)+(N-2)+…… 用另一种方式写,它显然是1..N中的数字之和,它具有众所周知的0.5*N*(N+1)解,也可以写成0.5*(N^2+

我已经看了这个例子有一段时间了,我被困住了,我的问题是这个陈述有多少次:

System.out.println(y);
将在以下代码中执行:

for(int x=0;x<N;x++){
  for(int y=x;y<N;y++){
    System.out.println(y);
  }
}
for(intx=0;x是的,它是
N+(N-1)+(N-2)+……

用另一种方式写,它显然是
1..N
中的数字之和,它具有众所周知的
0.5*N*(N+1)
解,也可以写成
0.5*(N^2+N)


由于
N^2
项占主导地位,因此在大O表示法中,这被视为
O(N^2)
,0.5常数因子被忽略。

答案将在精确的1/2N(N+1)行上打印出答案1/2N(N+1)次

例如,对于1,它将打印1次。对于2,它将打印3次,对于3,它将打印6次

模式是:1、3、6、10、15、21、28,并且该模式将始终匹配

 F(x) = 1/2 x N x (N+1)

希望这有帮助

我的第一个建议是测试它-它是代码,它是要运行的

public static void runMe(int N) {
    int counter = 0;
    for(int x=0;x<N;x++){
      for(int y=x;y<N;y++){
        counter ++; // replacing the print
      }
    }
    System.out.println(counter);
}
您可以看到,这对应于(N+1)*N/2=i=1到N之间i的和。但是有一种更好的几何方法来看待这一点。让我们用星号替换数字:

public static void runMe(int N) {
    int counter = 0;
    for(int x=0;x<N;x++){
      for(int y=x;y<N;y++){
        System.out.print("*");
      }
      System.out.println();
    }
}
底边为8、高度为8的三角形。三角形的面积为底边x高度/2。8*9/2=4*9=36(接受高度或宽度+1以固定圆角:它毕竟不是一个完全平滑的三角形)。几何图形获胜

如果你还记得三角形面积的几何解释,它也适用于这里(它解释了+1):让我们剪切和折叠三角形:

********/*
*******/**
******/***
*****/****
这就是:使用偶数N,切割下三角形,旋转它,它将与上三角形很好地匹配。N/2行中的每一行N+1=(N+1)*N/2

对于奇数N,您可以保持第一行不变:这是N=7的输出

*******
******
*****
****
***
**
*
折叠后:(N+1)/2*N=(N*1)*N/2=28

*******/
******/*
*****/**
****/***

当你运行它时会发生什么?真是个问题!a+,为了方便,方程式是0.5*(N^2+N)。因为这个答案是错误的,所以请投反对票。此外,他不是问计算时间,而是问它将被打印的确切次数。我已经解决了这个问题(事实上,我认为否决票发生在我在扩展
0.5*N*(N+1)
时出错之前),他确实明确询问了Big-O复杂性!我错过了Big-O复杂性。这一部分是正确的。@lacraig2同样,像这样的小错误通常应该被注释,以便得到修复,而不是否决票
*******
******
*****
****
***
**
*
*******/
******/*
*****/**
****/***