|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
与题目我觉得相关,是我自己的答案遇到bug,并不是需要知道标准答案,以下代码
总是在while 循环执行第二次的时候,b的值自动变为5,不明白为什么?
求解答
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,j=1,total=0,i=0,k=0,l;
int c[]={0};
printf("请输入一个整数:");
scanf("%d",&a);
printf("%d\n",a);
b=pow(a,3);
printf("%d\n",b);
while(1)
{
c[i]=j;
total +=c;
printf("第%d次执行\n",i);
printf("%d\n",total);
printf("%d\n",b);
i++;
j+=2;
if (total==b)
{
printf("执行1\n");
printf("猜想正确%d的立方%d=%d",a,b,c[0]);
for (l=1;l<=i;l++)
{
printf("+%d",c[l]);
}
break;
}
if (total>b)
{
printf("执行2\n");
i=0;
k++;
j=k*2+1;
total=0;
}
}
return 0;
}[/i]
用变长数组或许可以解决当下的问题,但随着代码越写越多,就难免不出差了,为此,还是得从算法上下点功夫。看到你的问题,我自己也编写了一个,利用确定的数列首项,编程也就简化了不少
- // 验证尼科彻斯定理:任何一个正整数的立方都可以写成一串连续奇数的和
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int a,b,s,i,j,first;
- int total = 0;
- printf("一个数 N 立方等于 N 个 N 的平方之和,即:N ^ 3 = N * N ^ 2\n");
- printf("即:(N ^ 2 - N) + (N ^ 2 - (N - 1)) ... + N ^ 2 ... + (N ^ 2 + (N - 1) + (N ^ 2 + N)\n");
- printf("为了确保首项为奇数,故有:N ^ 2 - N + 1\n"); // 证明首项是合法的
- printf("请输入一个整数:");
- scanf("%d",&a);
-
- b=pow(a,3);
- printf("%d 的立方:b = %d\n",a,b);
- s = a * a - a + 1;
- first = s;
- for (i = 1;i < b;i++)
- {
- total += s;
- s += 2;
- if (total == b)
- {
- printf("b 由 %d 个奇数相加得到\n",i);
- break;
- }
- }
- printf("b = %d",first);
- for (j = 2;j < 2 * i;j=j + 2)
- {
- printf(" + %d",first + j);
- }
- printf("\n");
- }
复制代码
|
|