马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 z578067809 于 2017-11-6 18:58 编辑
以下是关于C语言 S1E21:指针课后习题02答案的问题
原题目的答案中,8^3这行的答案好像有些问题,发个贴子,希望能讨论一下。
原答案如下:
很明显的,可以看到 8^3这行的右边是不会等于左边的。
我个人觉得答案应该是下面这样:
下面是我的code,也不知道是否完全正确,希望大家能够讨论一下,如果有什么错误,还希望各位鱼友不吝指出,谢谢。
#include <stdio.h>
#include <math.h>
int main()
{
int a, b, sum = 0, i = 1, temp;
//a为底数,b为a的3次幂,temp为连续奇数串的第1个奇数 ,i遍历奇数串
int range;// range为数据范围的最大值
char answer;
printf("请输入一个整数:");
scanf("%d", &range); // range为数据范围的最大值
int array[range][4] ;
for ( a = 3; a <= range; a++ )
{
b = pow(a,3);
temp = 1;
while ( i < b ) //通过i来遍历相加奇数串,不符合则奇数串后移一位重新开始
{
sum = sum + i;
if ( sum > b ) //通过temp存储奇数串后移之后的第1个奇数 ,以便后面使用
{
temp += 2;
i = temp;
sum = 0;
continue;
}
else if ( sum == b )
{
array[a][0] = b;
array[a][1] = temp;
array[a][2] = temp + 2;
array[a][3] = i;
break;
}
i += 2;
}
if ( i > b)
{
printf("验证失败:整数 %d 无法找到对应的连续奇数\n",a);
break;
}
}
// a(range以内的数)全部验证结束了
// 若没有全部验证结束(即存在不符合定理的数),则不会有a > range
if ( a > range )
{
printf ("经验证, 3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n", range);
printf("是否打印所有式子(y/n):");
getchar();
scanf("%c", &answer);
if ( answer == 'y' )
{
for ( a = 3; a <= range; a++ )
{
if ( array[a][3] - array[a][1] > 4 )
{
printf("%d^3 == %d == %d + %d +... + %d\n", a, array[a][0], array[a][1], array[a][2], array[a][3]);
}
else
{
printf("%d^3 == %d == %d + %d + %d\n", a, array[a][0], array[a][1], array[a][2], array[a][3]);
}
}
}
}
return 0;
}
PS:最后快要做到C语言课后习题的动态内存了,后面怎么没题目了,有没有哪套可以配套的题目可以推荐的,谢谢 |