• 完美立方


    /*a3 = b3 + c3 + d3为完美立方等式。例如123 = 63 + 83 + 103 。
    编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),
    使得a3 = b3 + c3 + d3,其中1<a, b, c, d ≤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)
    */
    /*
    #include<stdio.h>
    #include<math.h>
    int main()
    {
    int i,n,x,y,z;
    do
    {
    scanf("%d",&n);
    }while(n<0||n>100);
    for(i=2;i<=n;i++)
    {
    for(x=1;x<=n;x++)
    for(y=x+1;y<=n;y++)
    for(z=y+1;z<=n;z++)
    if(pow(i,3)==pow(x,3)+pow(y,3)+pow(z,3))
    {
    printf("Cube = %d, Triple = (%d,%d,%d)",i,x,y,z);
    printf(" ");
    }
    }

    return 0;
    }
    */

    优化后的代码
    #include<stdio.h>
    #include<math.h>
    int main()
    {
    int cube[101];
    int n,i,a,b,c,d;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    cube[i]=pow(i,3);
    for(a=6;a<=n;a++)
    for(b=2;b<=a-2;b++)//当b=1时无法找到满足的其他值,可先取连续的 b,c,d,
    //即c取b+1,d取b+2,则b+2<a,才有可能取到满足的值
    {
    if(cube[a]<cube[b]+cube[b+1]+cube[b+2])
    break;//若cube[a]小于连续的b,c,d所对应的cube值,即更不可能满足
    //非连续的b,c,d所对的cube值则退出循环
    for(c=b+1;c<a-1;c++)
    {
    if(cube[a]<cube[b]+cube[c]+cube[c+1])
    break;//当b相对固定时,cube[a]的值小于连续的c.d所对应的cube值时
    //即无法满足非连续的c,d所对应的 cube值则退出循环
    for(d=c+1;d<n;d++)
    if(cube[a]==cube[b]+cube[c]+cube[d]) //当cube[a]大于连续的b,c,d所对应的cube值时,
    // c相对固定,逐个寻找相应的d
    printf("Cube=%d,Triple=(%d,%d,%d) ",a,b,c,d);
    }
    }

    return 0;
    }

  • 相关阅读:
    迭代器、生成器、装饰器(转)
    Python小数据池
    接阿里云oss有感
    VSCode快捷键
    前端跨域调请求 nginx反向代理
    Git生成密钥
    【westorm系列之二】配置格式化
    钉钉安卓端无法渲染数据
    express 写接口
    js正则匹配身份证号 有坑
  • 原文地址:https://www.cnblogs.com/yfz1552800131/p/5247703.html
Copyright © 2020-2023  润新知