OpenJudge计算概论-完美立方【暂时就想到了枚举法了】

简介: /*===================================== 完美立方 总时间限制: 1000ms 内存限制: 65536kB 描述 a的立方 = b的立方 + c的立方 + d的立方为完美立方等式。
/*=====================================
完美立方
总时间限制: 1000ms 内存限制: 65536kB
描述
a的立方 = b的立方 + c的立方 + d的立方为完美立方等式。例如12的立方 = 6的立方 + 8的立方 + 10的立方 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a的立方 = b的立方 + c的立方 + d的立方,其中a,b,c,d 大于 1, 小于等于N。
输入
正整数N (N≤100)
输出
每行输出一个完美立方,按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则依次按照b、c、d进行非降升序排列输出,即b值小的先输出、然后c值小的先输出、然后d值小的先输出。
样例输入
24
样例输出
Cube = 6, Triple = (3,4,5) 
Cube = 12, Triple = (6,8,10) 
Cube = 18, Triple = (2,12,16) 
Cube = 18, Triple = (9,12,15) 
Cube = 19, Triple = (3,10,18) 
Cube = 20, Triple = (7,14,17) 
Cube = 24, Triple = (12,16,20) 

解析:
4层for循环可以做,枚举法 
a的循环范围从2到N
b的循环范围也是从2到N
c的循环范围从b开始到N
d的循环范围从c开始到N

输出结果要注意严格按照输入输出案例里面的空格设置方式来设置。 
======================================*/
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a,b,c,d,N;
 5     int a3,b3,c3,d3;
 6     scanf("%d",&N); 
 7     for(a=2;a<=N;a++)
 8     {
 9         a3=a*a*a;
10         for(b=2;b<=N;b++)
11         {
12             b3=b*b*b;
13             if(a3<b3) break;
14             for(c=b;c<=N;c++)
15             {
16                 c3=c*c*c;
17                 if(a3<b3+c3)  break;
18                 for(d=c;d<=N;d++)
19                 {
20                     d3=d*d*d;
21                     if(a3==b3+c3+d3)
22                     {
23                         printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
24                     }
25                 }
26             }
27         }
28     }
29     return 0;
30 }

看看下面的三重for循环的代码:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main(int argc, char *argv[])
 4 {
 5     int a,b,c,d,n,t;
 6     scanf("%d",&n);
 7     for(a=2;a<=n;a++)
 8     {
 9         for(b=2;b<=n;b++)
10         {
11             for(c=b;c<=n;c++)
12             {
13                 t=a*a*a-b*b*b-c*c*c;
14                 d=(int)(pow(t,1.0/3)+0.5);
15                 if(d*d*d==t&&d>c&&d<=n)
16                 {
17                     printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
18                 }
19             }
20         }
21     }
22     return 0;
23 }

 

 注意题目要求的输出顺序比较特殊,所以下面这段代码是错误的:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main(int argc, char *argv[])
 4 {
 5     int a,b,c,d,n,a3;
 6     scanf("%d",&n);
 7     for(b=2;b<=n;b++)
 8     {
 9         for(c=b;c<=n;c++)
10         {
11             for(d=c;d<=n;d++)
12             {
13                 a3=b*b*b+c*c*c+d*d*d;
14                 a=pow(a3,1.0/3)+0.5;
15                 if(a*a*a==a3&&a>1&&a<=n)
16                 {
17                     printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
18                 }
19             }
20         }
21     }
22     return 0;
23 }
错误的代码

运行结果:

24
Cube = 18, Triple = (2,12,16)
Cube = 6, Triple = (3,4,5)
Cube = 19, Triple = (3,10,18)
Cube = 12, Triple = (6,8,10)
Cube = 20, Triple = (7,14,17)
Cube = 18, Triple = (9,12,15)
Cube = 24, Triple = (12,16,20)
请按任意键继续. . .

 

 

 

 

 

相关文章
|
8月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 圆的面积
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 圆的面积
70 0
|
8月前
日拱一卒,月进一步(6)(杨辉三角2)
119. 杨辉三角 II - 力扣(LeetCode)
47 0
|
8月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-150 6-1 递归求二项式系数值
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-150 6-1 递归求二项式系数值
71 1
|
8月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-481 阿尔法乘积
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-481 阿尔法乘积
59 0
|
8月前
|
存储 Java 索引
第十四届蓝桥杯集训——数组(一维)
第十四届蓝桥杯集训——数组(一维)
83 0
|
算法 网络架构
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
65 0
|
算法
代码随想录算法训练营第三十一天 | LeetCode 455. 分发饼干、376. 摆动序列、53. 最大子数组和
代码随想录算法训练营第三十一天 | LeetCode 455. 分发饼干、376. 摆动序列、53. 最大子数组和
74 0
|
算法 索引
代码随想录训练营day34| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果...
代码随想录训练营day34| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果...
104 0
|
机器学习/深度学习 算法 JavaScript
代码随想录训练营day31| 455.分发饼干 376. 摆动序列 53. 最大子序和
代码随想录训练营day31| 455.分发饼干 376. 摆动序列 53. 最大子序和
|
C++
信奥赛一本通1122:计算鞍点
【题目描述】 给定一个5×5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。 11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 2 15 10 11 20 25
675 0