• 完美立方


    /*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;
    }

  • 相关阅读:
    从针对接口编程到依赖注入
    DataRow 数组转化成DataTable
    Math 类的方法概要
    .net控件
    字符串反转
    DataTable
    Enabled设置为False时,前景色和背景色也不改变的TextBox 并居中
    C# 四舍五入 (解决四舍六入五成双的问题)
    查询最后一条数据
    C# toString()
  • 原文地址:https://www.cnblogs.com/yfz1552800131/p/5247703.html
Copyright © 2020-2023  润新知