zoukankan      html  css  js  c++  java
  • OpenJudge计算概论-完美立方【暂时就想到了枚举法了】

    /*=====================================
    完美立方
    总时间限制: 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)
    ",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)
    ",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)
    ",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)
    请按任意键继续. . .
  • 相关阅读:
    前台开发——处理用户密码登录的修改功能
    前台开发——处理用户收货信息的修改
    Max Sum -- hdu -- 1003
    (深搜)Oil Deposits -- hdu -- 1241
    (博弈 sg入门2)
    (博弈 sg入门)kiki's game -- hdu -- 2147
    (巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846
    (全排列)Ignatius and the Princess II -- HDU -- 1027
    (模拟)Arithmetic Sequence -- HDU -- 5400
    (字符串 键盘转换)Convert QWERTY to Dvorak -- zoj -- 5526
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3465931.html
Copyright © 2011-2022 走看看