鱼C论坛

 找回密码
 立即注册
查看: 1851|回复: 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就好啦

  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.         int count,j;
  5.         char judge;
  6.       
  7.         printf("请输入一个整数:");
  8.         scanf("%d",&count);
  9.         getchar();
  10.         printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n",count);
  11.         printf("是否打印所有的式子(y/n):");
  12.         scanf("%c",&judge);                                  //不知道为什么,运行出来这个地方直接跳过了输入第二个y/n,直接程序结束了,为什么啊?
  13.       
  14.         if(judge == 'n')
  15.         {
  16.                 ;
  17.         }
  18.         else if(judge == 'y')
  19.         {
  20.                 for(j = 3;j <= count;j++)
  21.                 {
  22.                         int num2;
  23.                         int begin = -1;
  24.                         int flag1 = 1;
  25.                         int i;
  26.                
  27.                         num2 = j * j * j;
  28.                         while(flag1)
  29.                         {
  30.                                 int sum = 0;
  31.                                 begin +=2;
  32.                                 for(i = begin;;i+=2)
  33.                                 {
  34.                                         sum = sum+=i;
  35.                                         if(sum == num2)
  36.                                         {
  37.                                                 flag1 = 0;
  38.                                                 break;
  39.                                         }
  40.                                         else if(sum > num2)
  41.                                         {
  42.                                                 break;
  43.                                         }
  44.                                 }
  45.                         }
  46.                         int sum = 0;
  47.                         printf("%d =",num2);
  48.                         for(i = begin;sum <= num2;i+=2)
  49.                         {
  50.                                 if(sum < num2)
  51.                                 {
  52.                                         sum += i;
  53.                                         printf(" %d +",i);
  54.                                 }
  55.                                 else
  56.                                 {
  57.                                         sum += i;
  58.                                         printf(" %d +",i);
  59.                                         printf("\b \n");
  60.                                 }
  61.                         }
  62.                 }
  63.         }
  64.       
  65.         return 0;
  66. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.         int count,j;
  5.         char judge;
  6.       
  7.         printf("请输入一个整数:");
  8.         scanf("%d",&count);
  9.         getchar();
  10.         printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n",count);
  11.         printf("是否打印所有的式子(y/n):");
  12.         scanf("%c",&judge);                                  //不知道为什么,运行出来这个地方直接跳过了输入第二个y/n,直接程序结束了,为什么啊?
  13.       
  14.         if(judge == 'n')
  15.         {
  16.                 ;
  17.         }
  18.         else if(judge == 'y')
  19.         {
  20.                 for(j = 3;j <= count;j++)
  21.                 {
  22.                         int num2;
  23.                         int begin = -1;
  24.                         int flag1 = 1;
  25.                         int i;
  26.                
  27.                         num2 = j * j * j;
  28.                         while(flag1)
  29.                         {
  30.                                 int sum = 0;
  31.                                 begin +=2;
  32.                                 for(i = begin;;i+=2)
  33.                                 {
  34.                                         sum = sum+=i;
  35.                                         if(sum == num2)
  36.                                         {
  37.                                                 flag1 = 0;
  38.                                                 break;
  39.                                         }
  40.                                         else if(sum > num2)
  41.                                         {
  42.                                                 break;
  43.                                         }
  44.                                 }
  45.                         }
  46.                         int sum = 0;
  47.                         printf("%d =",num2);
  48.                         for(i = begin;sum <= num2;i+=2)
  49.                         {
  50.                                 if(sum < num2)
  51.                                 {
  52.                                         sum += i;
  53.                                         printf(" %d +",i);
  54.                                 }
  55.                                 else
  56.                                 {
  57.                                         sum += i;
  58.                                         printf(" %d +",i);
  59.                                         printf("\b \n");
  60.                                 }
  61.                         }
  62.                 }
  63.         }
  64.       
  65.         return 0;
  66. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这是什么原理呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 18:30:07 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int nico(int n)
  3. {
  4.         int h , k                                             ;
  5.         h = n * n - n                                         ;
  6.         if(! (h % 2)) h ++                                    ;
  7.         printf("%d = %d" , n * n * n , h)                     ;
  8.         for(k = 1 ; k < n ; k ++) printf(" + %d" , h + 2 * k) ;
  9.         printf("\n")                                          ;
  10.         return h                                              ;
  11. }

  12. int main(void)
  13. {
  14.         int count , j                                                            ;
  15.         char judge                                                               ;
  16.       
  17.         printf("请输入一个整数:")                                               ;
  18.         scanf("%d" , & count)                                                    ;
  19.         printf("经验证 ,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n" , count) ;
  20.         printf("是否打印所有的式子(y/n) :")                                     ;
  21.         fflush(stdin)                                                            ;
  22.         judge = getchar()                                                        ;
  23.         if(judge == 'Y' || judge == 'y') for(j = 3 ; j <= count ; j ++) nico(j)  ;
  24. }
复制代码

        编译、运行实况
  1. D:\0002.Exercise\C>g++ -o nico2 nico2.c

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

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

  13. D:\0002.Exercise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

        楼主,最佳答案代码打印出的结果是错的,难道你没有发现?建议输入一个 9 看看打印出来的东西。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

怎么说呢,小甲鱼的演示的输出样例就和上面的一样,但是我发现你的验证的数据也是对的,我猜测这个定理可以有多个验证表达式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


       错误的结果五花八门,正确的结论只有一个,答案是否正确,只要验证等式是否符合规则和是否成立即可立见分晓。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

兄弟,话别说得这么满,而且我又没说你是错的,你自己看小甲鱼21节的课后作业的演示,我都向着你了,都没说你是错的,何必呢?我认真思考了你的答案,你呢?何必呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-27 03:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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