吻你不厌 发表于 2020-11-18 17:07:03

大佬救命

#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;
}

qiuyouzhi 发表于 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;
}

吻你不厌 发表于 2020-11-18 18:29:06

qiuyouzhi 发表于 2020-11-18 17:09
加上一个getchar,过滤掉第一次输入的那个\n就好啦

这是什么原理呢?

qiuyouzhi 发表于 2020-11-18 18:30:07

吻你不厌 发表于 2020-11-18 18:29
这是什么原理呢?

https://zhidao.baidu.com/question/138079375.html

jackz007 发表于 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>

jackz007 发表于 2020-11-18 19:46:39

本帖最后由 jackz007 于 2020-11-18 19:48 编辑

      楼主,最佳答案代码打印出的结果是错的,难道你没有发现?建议输入一个 9 看看打印出来的东西。

吻你不厌 发表于 2020-11-19 13:43:59

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

怎么说呢,小甲鱼的演示的输出样例就和上面的一样,但是我发现你的验证的数据也是对的,我猜测这个定理可以有多个验证表达式

jackz007 发表于 2020-11-19 13:59:02

本帖最后由 jackz007 于 2020-11-19 14:00 编辑

吻你不厌 发表于 2020-11-19 13:43
怎么说呢,小甲鱼的演示的输出样例就和上面的一样,但是我发现你的验证的数据也是对的,我猜测这个定理可 ...

       错误的结果五花八门,正确的结论只有一个,答案是否正确,只要验证等式是否符合规则和是否成立即可立见分晓。

吻你不厌 发表于 2020-11-19 17:18:01

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

兄弟,话别说得这么满,而且我又没说你是错的,你自己看小甲鱼21节的课后作业的演示,我都向着你了,都没说你是错的,何必呢?我认真思考了你的答案,你呢?何必呢?
页: [1]
查看完整版本: 大佬救命