一道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不可以吗?麻烦啦!
展开
 我来答
yzreactor
2013-07-30 · TA获得超过270个赞
知道答主
回答量:226
采纳率:0%
帮助的人:136万
展开全部
意思就是多加了两次啊,我的理解是这样的:
第一、当循环结束的时候k最后又加了一次,所以至少应该是k-1;
第二、又因为是while循环中的while(bool)这种循环,这种循环有一个特点就是先循环再判断,意思就是不管条件满足与否至少它会执行一次循环,所以最后s是已经超出2000了才停止了循环,以至于k又多加了一次,又是一个k-1。
综上,我们便可以得出k-2。
末日高督
2013-07-30 · TA获得超过303个赞
知道小有建树答主
回答量:469
采纳率:0%
帮助的人:256万
展开全部
的确应该是 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;

这句话还没怎么明白?麻烦能再详细点吗?麻烦您了!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beierte
2013-07-30 · TA获得超过147个赞
知道答主
回答量:262
采纳率:0%
帮助的人:83万
展开全部
直接写k就可以,那是错的。
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.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kangfu008
2013-07-30 · TA获得超过149个赞
知道答主
回答量:175
采纳率:66%
帮助的人:54.3万
展开全部
我看看应该是k-1;
怎么是k-2呢?
追问
答案是K-2,这位兄弟!
追答
应该是k-2;当取到正好最大值的时候;k++;此时s2000,结束。多了两次++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式