|
发表于 2020-2-19 11:41:17
|
显示全部楼层
本楼为最佳答案
本帖最后由 jackz007 于 2020-2-19 12:05 编辑
答案很简单,经过实际验证,在输入 n = 7 的情况下,sum == cubed 的条件无法得到满足,也就是说,问题无解!
这个代码只有在满足 n 是一个完全平方数的时候才会有解,就是说,只有在 n = 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 , 100 ,... 的时候才能有解,不信,你可以试。
下面,我们不用键盘输入,而是改用循环,在 n = 2 ~ 100 的范围内,把有解的 n 值直接扫描出来:
- #include <stdio.h>
- main()
- {
- int i , j , n , cubed , sum ;
- bool f ;
- for(n = 2 ; n < 101 ; n ++) {
- cubed = n * n * n ;
- for(sum = 0 , f = true , i = 1 ; f && i < cubed ; i += 2) {
- for(j = 1 ; f && j < cubed ; j += 2) {
- sum += j ;
- if(sum == cubed) {
- if(j - i > 4) printf("n = %3d : %d = %d + %d...+ %d\n" , n , cubed , i , i + 2 , j) ;
- else printf("n = %3d : %d = %d + %d + %d\n" , n , cubed , i , i + 2 , i + 4) ;
- f = false ;
- } else if (sum > cubed) {
- sum = 0 ;
- break ;
- }
- }
- }
- }
- }
复制代码
编译、运行实况:
- C:\Bin>g++ -o x x.c
- C:\Bin>x
- n = 4 : 64 = 1 + 3...+ 15
- n = 9 : 729 = 1 + 3...+ 53
- n = 16 : 4096 = 1 + 3...+ 127
- n = 25 : 15625 = 1 + 3...+ 249
- n = 36 : 46656 = 1 + 3...+ 431
- n = 49 : 117649 = 1 + 3...+ 685
- n = 64 : 262144 = 1 + 3...+ 1023
- n = 81 : 531441 = 1 + 3...+ 1457
- n = 100 : 1000000 = 1 + 3...+ 1999
- C:\Bin>
复制代码
|
|