当前位置: 代码迷 >> J2EE >> 已知跟 求三位数
  详细解决方案

已知跟 求三位数

热度:256   发布时间:2016-04-17 23:46:55.0
已知和 求三位数
三位数相加得一数,求这三位数,不能重复不能相同,例如知道和为3    那么只能  0+1+2=3,不能出现 0+0+3=3, 0+2+1=3, 1+0+2=3,1+2+0=3,       例如和为4,只能是0+1+3,   和为5    只能0+1+4  ,0+2+3,其余不能     用java编程实现


------解决方案--------------------
是这样的。笨方法  
int n = 5;

for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
for (int z = 0; z < n; z++) {
if ((x < y && y < z) && (x + y + z == n)) {
System.out.println(x + "+" + y + "+" + z + "=" + n);
}
}
}
}

------解决方案--------------------
引用:
是这样的。笨方法  
int n = 5;

for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
for (int z = 0; z < n; z++) {
if ((x < y && y < z) && (x + y + z == n)) {
System.out.println(x + "+" + y + "+" + z + "=" + n);
}
}
}
}

Z可以通过计算得出所以应该可以去掉,另外X Y的范围也可以优化,X应该最多取n/3-1,Y应该从X+1开始取值,最多取n/3
------解决方案--------------------

 public static void main(String[] args)
    {
        int n = 10;
        for (int x = 0; x < n - 2; x++)
        {
            for (int y = x+1; y < n - 1; y++)
            {
                for (int z = y+1; z < n; z++)
                {
                    if (x + y + z == n)
                    {
                        System.out.println("x=" + x + " y=" + y + " z=" + z);
                    }
                }
            }
            
        }
    }

这个算法至少可以这样优化一下。虽然也很丑陋。
引用:
Quote: 引用:

是这样的。笨方法  
int n = 5;

for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
for (int z = 0; z < n; z++) {
if ((x < y && y < z) && (x + y + z == n)) {
System.out.println(x + "+" + y + "+" + z + "=" + n);
}
}
}
}



有没有比较高大上的方法呢?   谢谢
  相关解决方案