不清楚这是什么情况啊
#include <stdio.h>
#include <math.h>
int main()
{
int a,a3,i,sum,b,c;
printf("请输入一个整数:");
scanf("%d",&a);
a3=pow(a,3);
for(i=1;;i=i+2)
{
sum=0;
b=i;
for(;sum<=a3;i=i+2)
{
sum=sum+i;
if(sum==a3)
{
c=i;
break;
}
}
if(sum==a3)
{
c=i;
break;
}
}
printf("%d=",a3);
for(i=b;i<c;i+=2)
{
printf("%d+",i);
}
printf("%d",c);
return 0;
}
内层循环和外层循环的i是一个变量,内层循环i的改变导致外层循环i不是从1连续+2,
输入的整数是3时,内层循环sum=1+3+5+7+9+11=36>27,i=11+2=13,外层循环的i变成了13,就遗漏了从3,5,7,9,11开始的连续奇数
改进:替换内层的循环变量,如下
#include <stdio.h>
#include <math.h>
int main() {
int a, a3, i, sum, b, c, j;
printf("请输入一个整数:");
scanf("%d", &a);
a3 = pow(a, 3);
for (i = 1;; i = i + 2) {
sum = 0;
b = i;
j = i;
for (; sum <= a3; j = j + 2) {
sum = sum + j;
if (sum == a3) {
c = j;
break;
}
}
if (sum == a3) {
c = j;
break;
}
}
printf("%d=", a3);
for (i = b; i < c; i += 2) {
printf("%d+", i);
}
printf("%d", c);
return 0;
} 有一个习惯我觉得您要改一下,不要所有的循环都用i做迭代器,尤其是这种循环套循环的情况。这里的i被改了,那么外层的循环就会从大的数字开始算 本帖最后由 易改乌江水 于 2022-8-8 22:49 编辑
1+3+5+7+9=25
1+3+5+7+9+11=36
这是里面的循环的i做出的变化,也就是说,里面的第一次跑完,i就已经是9了,那么出这个循环的时候i = i+2,下次就是从11算起的,自然错过了7这个数开始算的情况
并且你前面用b将i存了起来,但是,在第一轮循环结束且未找到结果的情况下,你没有把原本的值还回去?
再其次,给个建议,哪怕你有自信这个程序一定能算出结果,但最外层的循环的条件还是要有的
所以逻辑没大错,把里面循环的i改成j就好了呀
页:
[1]