带你学C带你飞,作业S1E21的第三道编程题
这是我的代码,但输出的64 不是1 + 3 +...+15。求助#include <stdio.h>
int main(void)
{
int count;
int cube;
int sum = 0;
printf("请输入一个整数:\n");
scanf("%d",&count);
// // 定义一个二维数组来存储数值
// int num;
// for (num = 1;num * num * num < count * count * count;num++)
// {}
int n;
for (int i = 3;i <= count;i++)
{
cube = i * i * i;
for (int j = 1;j < cube;j += 2)
{
for (int k = j;k < cube;k += 2)
{
sum += k;
if (sum == cube)
{
// 存储数值
n = cube;
n = j;
n = j + 2;
n = k;
// if (k - j <= 4)
// printf("%d = %d + %d + %d\n",cube,j,j+2,k);
// else
// printf("%d = %d + %d + ... + %d\n",cube,j,j+2,k);
goto CONTINUE;
}
if (sum > cube) // 跳出 循环 还要记得把sum归0
{
sum = 0;
break;
}
}
}
CONTINUE:
; // 空语句,继续 i 循环
}
int b;
printf("请输入想要打印的范围:\n");
scanf("%d",&b);
for (int i = 3;i <= b;i++)
{
if (i == 3)
printf("%d = %d + %d + %d\n",n,n,n,n);
else
printf("%d = %d + %d ... +%d\n",n,n,n,n);
}
// printf("%d %d %d",n,n,n);
return 0;
} #include <stdio.h>
int main()
{
int n, res, arr = {0}, flag;
printf("输入一个整数:");
scanf("%d", &n);
n = n*n*n;
for(int i = 1; i < n; i += 2){
res = flag = 0;
for(int j = i, k = 0; j < n; j += 2){
res += arr = j;
if(res == n){
if(k < 4) printf("%d = %d + %d + %d", n , arr, arr, arr);
else printf("%d = %d + %d + ... + %d", n, arr, arr, arr);
flag = 1;
}
else if(res > n) break;
}
if(flag) break;
}
return 0;
} 傻眼貓咪 发表于 2021-12-23 19:48
这个只能输出n立方的奇数和,第三题是要把3~n这个范围的数都判定。最后再由用户输入要打印的范围 傻眼貓咪 发表于 2021-12-23 19:48
而且这个如果输入的数比较大的话,arr这个数组会不够空间出错。 Mirex 发表于 2021-12-23 20:01
而且这个如果输入的数比较大的话,arr这个数组会不够空间出错。
好的,我再研究研究{:10_277:} 傻眼貓咪 发表于 2021-12-23 20:32
好的,我再研究研究
谢谢兄嘚{:10_250:} Mirex 发表于 2021-12-23 20:33
谢谢兄嘚
已修改:#include <stdio.h>
int main()
{
int n, res, flag, flag2, flag3 = 1;
char c;
printf("输入一个整数:");
scanf("%d", &n);
int ans = {{0}};
for(int num = 3, x = num*num*num, p = 0; num <= n; num++, p++, x = num*num*num, flag2 = 0){
for(int i = 1; i < x; i += 2){
res = flag = 0;
for(int j = i, k = 0; j < x; j += 2){
res += ans = j;
if(res == x){
flag = flag2 = 1;
break;
}
else if(res > x) break;
}
if(flag) break;
}
if(!flag2){
printf("经验证,3 ~ %d 之间所有的整数不符合尼科彻斯定理!\n\n", n);
flag3 = 0;
break;
}
}
if(flag3) printf("经验证,3 ~ %d 之间所有的整数符合尼科彻斯定理!\n\n", n);
printf("是否打印所有式子(y/n):");
while((c = getchar()) != '\n');
scanf("%c", &c);
switch(c){
case 'y':
for(int i, j, r = i = 0; i < n-2; i++){
for(j = 0; ans && ans != ans; j++){}
if(j > 3) printf("%d^3 == %d == %d + %d + ... + %d", i+3, (i+3)*(i+3)*(i+3), ans, ans, ans);
else printf("%d^3 == %d == %d + %d + %d", i+3, (i+3)*(i+3)*(i+3), ans, ans, ans);
printf("\n");
}
break;
case 'n': break;
}
return 0;
} 谢谢啦 // 用户输入一个表示范围的最大值 count,程序将测试 3 ~ count 所有的整数是否都符合尼科彻斯定理。
// 暂未解决:整数4的值有问题,n。
#include <stdio.h>
int main(void)
{
int count;
int cube;
int sum = 0;
printf("请输入一个整数:\n");
scanf("%d",&count);
// // 定义一个二维数组来存储数值
// int num;
// for (num = 1;num * num * num < count * count * count;num++)
// {}
int n;
for (int i = 3;i <= count;i++)
{
// printf("a");
cube = i * i * i;
for (int j = 1;j < cube;j += 2)
{
// printf("b");
for (int k = j;k < cube;k += 2)
{
// printf("c");
sum += k;
if (sum == cube)
{
// 存储数值
n = cube;
n = j;
n = j + 2;
n = k;
// 存储完后还要把sum归零,判断下一个i是否满足
sum = 0;
// if (k - j <= 4)
// printf("%d = %d + %d + %d\n",cube,j,j+2,k);
// else
// printf("%d = %d + %d + ... + %d\n",cube,j,j+2,k);
goto CONTINUE;
}
if (sum > cube) // 跳出 循环 还要记得把sum归0
{
sum = 0;
break;
}
}
}
CONTINUE:
; // 空语句,继续 i 循环
}
int b;
printf("请输入想要打印的范围:\n");
scanf("%d",&b);
for (int i = 3;i <= b;i++)
{
if (i == 3)
printf("%d = %d + %d + %d\n",n,n,n,n);
else
printf("%d = %d + %d ... +%d\n",n,n,n,n);
}
// printf("%d %d %d",n,n,n);
return 0;
}
我自己的代码也找到了错误的原因。当累加和等于cube时没有把sum归零就进入了下一个循环,所以从这以后的所有数值都会出错。
页:
[1]