鱼C论坛

 找回密码
 立即注册
查看: 1708|回复: 8

[已解决]大佬救命

[复制链接]
发表于 2020-11-18 17:07:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main(void)
{
        int count,j;
        char judge;
       
        printf("请输入一个整数:");
        scanf("%d",&count);
        printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n",count);
        printf("是否打印所有的式子(y/n):");
        scanf("%c",&judge);                                  //不知道为什么,运行出来这个地方直接跳过了输入第二个y/n,直接程序结束了,为什么啊?
       
        if(judge == 'n')
        {
                ;
        }
        else if(judge == 'y')
        {
                for(j = 3;j <= count;j++)
                {
                        int num2;
                        int begin = -1;
                        int flag1 = 1;
                        int i;
               
                        num2 = j * j * j;
                        while(flag1)
                        {
                                int sum = 0;
                                begin +=2;
                                for(i = begin;;i+=2)
                                {
                                        sum = sum+=i;
                                        if(sum == num2)
                                        {
                                                flag1 = 0;
                                                break;
                                        }
                                        else if(sum > num2)
                                        {
                                                break;
                                        }
                                }
                        }
                        int sum = 0;
                        printf("%d =",num2);
                        for(i = begin;sum <= num2;i+=2)
                        {
                                if(sum < num2)
                                {
                                        sum += i;
                                        printf(" %d +",i);
                                }
                                else
                                {
                                        sum += i;
                                        printf(" %d +",i);
                                        printf("\b \n");
                                }
                        }
                }
        }
       
        return 0;
}
最佳答案
2020-11-18 17:09:45
加上一个getchar,过滤掉第一次输入的那个\n就好啦
#include<stdio.h>

int main(void)
{
        int count,j;
        char judge;
       
        printf("请输入一个整数:");
        scanf("%d",&count);
        getchar();
        printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n",count);
        printf("是否打印所有的式子(y/n):");
        scanf("%c",&judge);                                  //不知道为什么,运行出来这个地方直接跳过了输入第二个y/n,直接程序结束了,为什么啊?
       
        if(judge == 'n')
        {
                ;
        }
        else if(judge == 'y')
        {
                for(j = 3;j <= count;j++)
                {
                        int num2;
                        int begin = -1;
                        int flag1 = 1;
                        int i;
               
                        num2 = j * j * j;
                        while(flag1)
                        {
                                int sum = 0;
                                begin +=2;
                                for(i = begin;;i+=2)
                                {
                                        sum = sum+=i;
                                        if(sum == num2)
                                        {
                                                flag1 = 0;
                                                break;
                                        }
                                        else if(sum > num2)
                                        {
                                                break;
                                        }
                                }
                        }
                        int sum = 0;
                        printf("%d =",num2);
                        for(i = begin;sum <= num2;i+=2)
                        {
                                if(sum < num2)
                                {
                                        sum += i;
                                        printf(" %d +",i);
                                }
                                else
                                {
                                        sum += i;
                                        printf(" %d +",i);
                                        printf("\b \n");
                                }
                        }
                }
        }
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-18 17:09:45 | 显示全部楼层    本楼为最佳答案   
加上一个getchar,过滤掉第一次输入的那个\n就好啦
#include<stdio.h>

int main(void)
{
        int count,j;
        char judge;
       
        printf("请输入一个整数:");
        scanf("%d",&count);
        getchar();
        printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n",count);
        printf("是否打印所有的式子(y/n):");
        scanf("%c",&judge);                                  //不知道为什么,运行出来这个地方直接跳过了输入第二个y/n,直接程序结束了,为什么啊?
       
        if(judge == 'n')
        {
                ;
        }
        else if(judge == 'y')
        {
                for(j = 3;j <= count;j++)
                {
                        int num2;
                        int begin = -1;
                        int flag1 = 1;
                        int i;
               
                        num2 = j * j * j;
                        while(flag1)
                        {
                                int sum = 0;
                                begin +=2;
                                for(i = begin;;i+=2)
                                {
                                        sum = sum+=i;
                                        if(sum == num2)
                                        {
                                                flag1 = 0;
                                                break;
                                        }
                                        else if(sum > num2)
                                        {
                                                break;
                                        }
                                }
                        }
                        int sum = 0;
                        printf("%d =",num2);
                        for(i = begin;sum <= num2;i+=2)
                        {
                                if(sum < num2)
                                {
                                        sum += i;
                                        printf(" %d +",i);
                                }
                                else
                                {
                                        sum += i;
                                        printf(" %d +",i);
                                        printf("\b \n");
                                }
                        }
                }
        }
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 18:29:06 | 显示全部楼层
qiuyouzhi 发表于 2020-11-18 17:09
加上一个getchar,过滤掉第一次输入的那个\n就好啦

这是什么原理呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 18:30:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 19:07:03 | 显示全部楼层
#include <stdio.h>

int nico(int n)
{
        int h , k                                             ;
        h = n * n - n                                         ;
        if(! (h % 2)) h ++                                    ;
        printf("%d = %d" , n * n * n , h)                     ;
        for(k = 1 ; k < n ; k ++) printf(" + %d" , h + 2 * k) ; 
        printf("\n")                                          ;
        return h                                              ;
}

int main(void)
{
        int count , j                                                            ;
        char judge                                                               ;
       
        printf("请输入一个整数:")                                               ;
        scanf("%d" , & count)                                                    ;
        printf("经验证 ,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n" , count) ;
        printf("是否打印所有的式子(y/n) :")                                     ;
        fflush(stdin)                                                            ;
        judge = getchar()                                                        ;
        if(judge == 'Y' || judge == 'y') for(j = 3 ; j <= count ; j ++) nico(j)  ;
}
        编译、运行实况
D:\0002.Exercise\C>g++ -o nico2 nico2.c

D:\0002.Exercise\C>nico2
请输入一个整数:9
经验证 ,3 ~ 9 之间所有的整数均符合尼科彻斯定理!

是否打印所有的式子(y/n) :y
27 = 7 + 9 + 11
64 = 13 + 15 + 17 + 19
125 = 21 + 23 + 25 + 27 + 29
216 = 31 + 33 + 35 + 37 + 39 + 41
343 = 43 + 45 + 47 + 49 + 51 + 53 + 55
512 = 57 + 59 + 61 + 63 + 65 + 67 + 69 + 71
729 = 73 + 75 + 77 + 79 + 81 + 83 + 85 + 87 + 89

D:\0002.Exercise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 19:46:39 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-18 19:48 编辑

        楼主,最佳答案代码打印出的结果是错的,难道你没有发现?建议输入一个 9 看看打印出来的东西。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-19 13:43:59 | 显示全部楼层
jackz007 发表于 2020-11-18 19:46
楼主,最佳答案代码打印出的结果是错的,难道你没有发现?建议输入一个 9 看看打印出来的东西。

怎么说呢,小甲鱼的演示的输出样例就和上面的一样,但是我发现你的验证的数据也是对的,我猜测这个定理可以有多个验证表达式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-19 13:59:02 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-19 14:00 编辑
吻你不厌 发表于 2020-11-19 13:43
怎么说呢,小甲鱼的演示的输出样例就和上面的一样,但是我发现你的验证的数据也是对的,我猜测这个定理可 ...


       错误的结果五花八门,正确的结论只有一个,答案是否正确,只要验证等式是否符合规则和是否成立即可立见分晓。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-19 17:18:01 | 显示全部楼层
jackz007 发表于 2020-11-19 13:59
错误的结果五花八门,正确的结论只有一个,答案是否正确,只要验证等式是否符合规则和是否成立 ...

兄弟,话别说得这么满,而且我又没说你是错的,你自己看小甲鱼21节的课后作业的演示,我都向着你了,都没说你是错的,何必呢?我认真思考了你的答案,你呢?何必呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 21:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表