没有从外循环和第二循环跳过任何步骤,这将给我们n(n + 1)/ 2次迭代,但我不知道如何计算最里面的循环。
int n = int.Parse(Console.ReadLine());
int i =1,j,k;
while(i<=n)
{
for(j=1;j<=i;j++)
{
if(j%3==0)
{
for(k=1;k<=(n/2);k++)
{
Console.Write("*");
}
}
else if(j%3==1)
{
k=j;
while(k>=1)
{
Console.Write("@");
k--;
}
}
else
{
for(k=1;k<=(j%3);k++)
{
Console.Write("$");
}
}
}
i++;
}
答案 0 :(得分:-1)
第一个循环将完全n
次迭代。
第二个循环将完全n(n+1)/2
次迭代。
第二个循环内部大约有1/3
个n/2
个长循环,1/3
个j
长循环和1/3
个2
长循环。
如果我们只查看三种可能情况中的第一种情况,那么我们得到(n(n+1)/2) * 1/3 * n/2
n*n*(n+1)/12
,O(n^3)
或更精确Theta(n^3)
另外两个案例没有太大区别,它们只会改变常数。
总而言之,在悲观和乐观的情况下,此代码必须执行与n^3
成比例的多次迭代。
答案 1 :(得分:-3)
两个提示
new string(char, int)
ctor。分析:
内循环:其中一个
O(n)* O(n)* O(n)= O(N ^ 3)。
您可能认为不完全正确 - 第一个最内层循环是O(n / 2),但是是Big-O计算,常量被消除,因此O(n / 2)与O(n)相同)。
(更新 - 我忘记了最外面的循环)