zy990106 发表于 2022-4-15 18:01:11

搞不懂了~~~

#include <stdio.h>

int main()
{
      int i, j, n, cubed, sum = 0;

      printf("请输入一个整数:");
      scanf("%d", &n);

      cubed = n * n * n;

      for (i = 1; i < cubed; i += 2)
      {
                for (j = i; j < cubed; j += 2)
                {
                        sum += j;
                        if (sum == cubed)
                        {
                              if (j - i > 4)
                              {
                                        printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
                              }
                              else
                              {
                                        printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
                              }
                              goto FINDIT;
                        }

                        if (sum > cubed)
                        {
                              sum = 0;
                              break;
                        }
                }
      }

FINDIT:

      return 0;
}



这是小甲鱼的课后作业, 比如我输入3 我会得到27=7+9+11求助 i 为什么会等于7搞了好久~~

大马强 发表于 2022-4-15 18:26:17

题目是啥?

风车呼呼呼 发表于 2022-4-15 19:46:30

代入数据读一遍代码就知道了
搞了好久还不懂的话,不如想想自己是不是看懂了题目
看这逻辑是用一段连续的奇数列之和来表示一个整数的立方

jackz007 发表于 2022-4-15 19:54:19

本帖最后由 jackz007 于 2022-4-15 20:32 编辑

      简单,比如 3 ,中心数是 3 ^ 2 = 9,以 9 为中心数的 3 个连续的奇数是 7 , 9 , 11 ;又比如 4,中心数是 4 ^ 2 = 16,以 16 为中心数的 4 个连续奇数是 13 , 15 , 17 , 19;对于 5,中心数是 5 ^ 2 = 25,以 25 为中心数的连续 5 个奇数当然是 21,23,25,27,29,余此类推。
#include <stdio.h>

int main(void)
{
      int b , i , j , n , sum                                     ;
      printf("请输入一个整数:")                                  ;
      scanf("%d" , & n)                                           ;
      if(n > 2) {
                j = n * n - n                                       ;
                if(! (j % 2)) j ++                                  ;
                printf("%d" , j)                                    ;
                for(sum = b = j , i = 0 ; i < n - 1 ; i ++) {
                        b += 2                                    ;
                        sum += b                                    ;
                        printf(" , %d" , b)                         ;
                }
                printf("\n")                                        ;
                printf("cubed = %d , sum = %d\n" , n * n * n , sum) ;
      }
}
      编译、运行实况:
D:\\>g++ -o x x.c

D:\\>x
请输入一个整数:3
7 , 9 , 11
cubed = 27 , sum = 27

D:\\>x
请输入一个整数:4
13 , 15 , 17 , 19
cubed = 64 , sum = 64

D:\\>x
请输入一个整数:5
21 , 23 , 25 , 27 , 29
cubed = 125 , sum = 125

D:\\>x
请输入一个整数:6
31 , 33 , 35 , 37 , 39 , 41
cubed = 216 , sum = 216

D:\\>

yzzc 发表于 2022-4-16 08:55:50

本帖最后由 yzzc 于 2022-4-16 09:01 编辑

程序的意思应该是,一个数的3次方,转化成连续的奇数和且奇数和等于3次方
按照程序爆破思想,例如3,3的3次方27,从1+3+……如果和大于27就进入下一次循环
直到i=7
7+9+11=27,所以i是7开头

zy990106 发表于 2022-4-16 19:37:57

感谢大家 搞懂了
页: [1]
查看完整版本: 搞不懂了~~~