这个是题目
这个是正确答案
#include<stdio.h>
int main()
{
int n,i,y,sum=0;
scanf("%d",&y);
for(i=1;sum<=y;i++)
{
sum+=i;
}
printf("Result: n=%d, sum=%d",i-2,sum-i+1);
return 0;
}
请问输出那里为什么是i-2和sum-i+1啊?谢谢
这个是题目
#include<stdio.h>
int main()
{
int n,i,y,sum=0;
scanf("%d",&y);
for(i=1;sum<=y;i++)
{
sum+=i;
}
printf("Result: n=%d, sum=%d",i-2,sum-i+1);
return 0;
}
请问输出那里为什么是i-2和sum-i+1啊?谢谢
i-2的原因:当循环到某个i值时,执行了sum+=i,然后i+1,继续循环,检查发现sum<=y条件不成立,结束循环。那么显然在加上前一个i值时,sum值已经大于y了,所以这里前一个i值就是i-1。另外,当最后一次循环发现sum<=y不成立,结束循环时,i++还会执行一次,导致i又增加了1,所以最终满足条件的i值就是for循环结束后的i值减去2
sum-i+1的原因:sum-i+1就是sum - (i-1),同上面i-2的原因,循环结束后,sum值是大于y的,所以必须减去最后一次累加的值。由于for循环结束后,i++还会加1,所以实际是多加了i-1,因此sum要减去这个i-1才是实际的累加和,因此是sum-i+1