|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 软大头 于 2021-10-5 16:51 编辑
#include<stdio.h>
#include<math.h>
int main()
{
bool flag=0;
int i,j,k,l,n,cubed,sum,count;
int str[1024];
j=3;
i=2;
printf("请输入一个整数:");
scanf("%d",&n);
cubed=n*n*n;
int result;
for(i=2;;i++)
{
for(j=3;;j=j+2)
{
sum=j*i+i*(i-1); //设分解后的第一个奇数是j,一共有i个
if(sum>cubed)
{
break;
}
else if(sum==cubed) //得到j和i
{
flag=1;
break;
}
}
if(flag)
{
break;
}
}
for(k=0;k<i;k++)
{
str[k]=j+2*k;
}
printf("%d=",cubed);
for(l=0;l<i;l++)
{
printf("%d,",str[l]);
}
printf("\b");
return 0;
}
这是我的动动手1的答案,但是同样的方法却在动动手2出问题了??
#include<stdio.h>
#include<math.h>
int main()
{
bool flag=0;
int i,j,k,l,n,cubed,sum,num,m,count;
int str[110][110]={0};
char c;
count=0;
printf("请输入一个整数:");
scanf("%d",&num);
for(l=3;l<=num;l++)
{
cubed=pow(l,3);
for(i=2;;i++)
{
for(j=3;;j=j+2)
{
sum=j*i+i*(i-1); //设分解后的第一个奇数是j,一共有i个
if(sum>cubed)
{
break;
}
else if(sum==cubed) //得到j和i,同时将成功次数加1
{
count=count+1;
flag=1;
break;
}
}
if(flag)
{
break;
}
}
for(k=0;k<i;k++)
{
str[l][k]=j+2*k; //把分解的奇数存放
}
}
if(count==num-2) //如果成功分解次数等于3-num的个数,说明定理成立。
{
printf("成立!\n");
}
else
{
printf("不成立!\n");
}
printf("是否需要打印?y/n:");
getchar();
scanf("%c",&c);
if(c=='y')
{
for(m=3;m<=num;m++)
{
cubed=pow(m,3);
printf("%d=",cubed);
for(n=0;n<100;n++)
{
if(str[m][n]==0)
{
break;
}
else
{
printf("%d+",str[m][n]);
}
}
printf("\b");
printf("\n");
}
}
return 0;
}
这是我的动动手2的答案,每次试到5的时候就开始犯病了。这是为啥啊??大佬们救救我吧。
没有看懂你的那个公式,你用错公式了吧?
- sum = j * i + i * (i - 1);
复制代码
这个公式就是计算 i 到 j 之间的所有奇数的和吧?
- i,i + 2,i + 4,i + 6,。。。,j
复制代码
- #include <stdio.h>
- #include <stdbool.h>
- int main(void) {
- size_t n;
- printf("请输入一个数:");
- scanf("%lu", &n);
- size_t cubed = n * n * n;
- size_t i, j;
- for(i = 1; ; i += 2) {
- for(j = i; ; j += 2) {
- size_t num = (j - i) / 2 + 1;
- size_t sum = (i + j) * num / 2;
- if(sum > cubed) break;
- if(sum == cubed) goto done;
- }
- }
- done:
- printf("%lu => ", cubed);
- for(; i <= j; i += 2) {
- printf("%lu ", i);
- }
- printf("\n");
- return 0;
- }
复制代码
- $ gcc-debug -o main main.c
- $ ./main
- 请输入一个数:3
- 27 => 7 9 11
- $ ./main
- 请输入一个数:4
- 64 => 1 3 5 7 9 11 13 15
- $ ./main
- 请输入一个数:5
- 125 => 21 23 25 27 29
- $
复制代码
- #include <stdio.h>
- #include <stdbool.h>
- int main(void) {
- size_t n;
- printf("请输入一个数:");
- scanf("%lu", &n);
- size_t cubed = n * n * n;
- size_t i, j;
- for(i = 1; ; i += 2) {
- for(j = i; ; j += 2) {
- //size_t num = (j - i) / 2 + 1;
- //size_t sum = (i + j) * num / 2;
- size_t sum = j * i + i * (i - 1);
- if(sum > cubed) break;
- if(sum == cubed) goto done;
- }
- }
- done:
- printf("%lu => ", cubed);
- for(; i <= j; i += 2) {
- printf("%lu ", i);
- }
- printf("\n");
- return 0;
- }
复制代码
- $ gcc-debug -o main main.c
- $ ./main
- 请输入一个数:3
- 27 => 1 3 5 7 9 11 13 15 17 19 21 23 25 27
- $
复制代码
|
|