一道C#小程序题!!麻烦给位兄弟姐妹们啦!
题干:有关系式1*1+2*2+3*3+...+k*k<2000,编一个程序,求出满足此关系式的k的最大值;程序:intk=1,s=0;while(s<2000){s=s+...
题干:有关系式1*1+2*2+3*3+...+k*k<2000,编一个程序,求出满足此关系式的k的最大值;
程序:
int k = 1,s=0;
while (s < 2000)
{
s = s + k * k;
k++;
}
Console.WriteLine("k的值为{0}",k-2);
Console.ReadKey();
请问为什么K的值要“k-2”呢?直接写K不可以吗?麻烦啦! 展开
程序:
int k = 1,s=0;
while (s < 2000)
{
s = s + k * k;
k++;
}
Console.WriteLine("k的值为{0}",k-2);
Console.ReadKey();
请问为什么K的值要“k-2”呢?直接写K不可以吗?麻烦啦! 展开
4个回答
展开全部
的确应该是 K-2.
while (s < 2000) //如果s小于2000,则说明该轮循环已经过头,因此这里需要第一次减1;
//而这次减1的目的是将k变成 k++前的一个数.
//当s<2000的时候,其实对于此时的k而言,s= s+(k-1)*(k-1);
{
s = s + k * k;
k++;
}
所以最后返回的时候,需要将最后的k-2;
举个例子;
int s=0,k=1;
while(s<6)
{
s=s+k*k; //
k++;
}
第一轮k=1;s=1 当本轮结束的时候k=2
第二轮k=2:s=5当本轮结束的时候k=3
第三:k=3;s=14.当本轮结束的时候k=4
第四轮的时候,结束循环 k-1 只是将 k返回为 3(也就是第三轮的初始值),但是 这个初始值计算出来的s等于14已经不满足循环条件,因此还需要再减去1
while (s < 2000) //如果s小于2000,则说明该轮循环已经过头,因此这里需要第一次减1;
//而这次减1的目的是将k变成 k++前的一个数.
//当s<2000的时候,其实对于此时的k而言,s= s+(k-1)*(k-1);
{
s = s + k * k;
k++;
}
所以最后返回的时候,需要将最后的k-2;
举个例子;
int s=0,k=1;
while(s<6)
{
s=s+k*k; //
k++;
}
第一轮k=1;s=1 当本轮结束的时候k=2
第二轮k=2:s=5当本轮结束的时候k=3
第三:k=3;s=14.当本轮结束的时候k=4
第四轮的时候,结束循环 k-1 只是将 k返回为 3(也就是第三轮的初始值),但是 这个初始值计算出来的s等于14已经不满足循环条件,因此还需要再减去1
追问
while (s < 2000) //如果s小于2000,则说明该轮循环已经过头,因此这里需要第一次减1;
这句话还没怎么明白?麻烦能再详细点吗?麻烦您了!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接写k就可以,那是错的。
int k = 1, sum = 0;//定义变量并且初始化
while (sum < 2000)//运用while 限制条件
{
sum = sum + k * k;
k++;
}
Console.WriteLine(k );//打印满足关系式的最大k值
Console.ReadLine();//让页面停下来
int k = 1, sum = 0;//定义变量并且初始化
while (sum < 2000)//运用while 限制条件
{
sum = sum + k * k;
k++;
}
Console.WriteLine(k );//打印满足关系式的最大k值
Console.ReadLine();//让页面停下来
追问
答案是K=2,如果K不减去2的话,K的值是19,但是把19带到程序里发现求和的结果大于2000,而减去2后K的值为17,正好不大于2000,K的值为18的时候求和的结果都是2000,所以我就有点疑惑了,这是我反推的,但是为什么就是K-2呢?真的比较不解啊
追答
我想通了,确实是k-2.当跳出循环时,s已经大于2000并且k++又执行一次,在这里需要减两次1.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我看看应该是k-1;
怎么是k-2呢?
怎么是k-2呢?
追问
答案是K-2,这位兄弟!
追答
应该是k-2;当取到正好最大值的时候;k++;此时s2000,结束。多了两次++
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询