分析如下代码for(i=1;i<n;i++) for(j=1;j<i;j++) for(k=1;k<j;k++) printf("\n");
问printf语句共执行了几次?这段代码执行完以后i+j+k值为多少?
首先我们假设i < n满足条件,
那么当 i = 1;第一次循环,(j = 1 ; j < i; j++)这个条件不满足,返回。
第二次i = 2; j = 1; k = 1;不满足,返回。
当i = 3;j = 1 && j < 3;k = 1 && k < 1;这一个返回。j = 2 &&j < 3;k = 1 && k < 2;执行一次printf 共执行一次
当i = 4;排除j = 1;直接j = 2开始。执行一次printf,j = 3;k < 3; k = 1,k = 2;执行两次printf 共执行三次
当i = 5;j = 2一次,j = 3两次,j = 4三次 共六次次
当i = 6;j = 2一次,j = 3两次,j = 4三次 j = 5四次 共十次
由此推断n必须大于2
假如n=8;1 + 1 + 2 + 1 + 2 + 3 + 1 + 2 + 3 + 4 + 1 + 2 + 3 + 4 + 5
总次数:1*(n - 3) + 2 (n - 4) + 3 (n - 5) + ... + (n-3)*(n - n + 1)
i = n ; j = n - 1 ; k = n -2;
假设n=10 执行次数 9*8*7 结果相加
i = 1 j = 1第一个循环就出来了 所以走不到print那里
直接跑一边不久知道了
难道不是直接就跳出了吗
1,执行完以后i+j+k值为n+(n-1)+(n-2) ,循环i最后肯定等于n本身的
2,printf语句共执行了几次,这个有点复杂,需要拆分,把后面两个看成一个整体,再加上前面一个,答案是两部分1+2+3+...+n/2和
1^2+2^2+....+n^2/2
问printf语句共执行了几次?这段代码执行完以后i+j+k值为多少?
执行了(n-1)*(n-2)*(n-3)
i+j+k=n*(n-1)*(n-2)
printf语句
第一个循环 n-1次
第二个循环 n(n+1)(n+2)/6 次
第三个循环了n (n+1)10n^4+32n^3+8n^2-23n-27)/720 次
i+j+k=3n-5
建议自己写一个Test 类,在eclipse 中执行一下就知道结果了