已知和 求三位数

w009 2014-08-06 04:25:47
三位数相加得一数,求这三位数,不能重复不能相同,例如知道和为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编程实现

...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyfhz 2014-08-06
  • 打赏
  • 举报
回复
如果次数不是太多的话,可以用递归
super_loverax 2014-08-06
  • 打赏
  • 举报
回复

 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);
                    }
                }
            }
            
        }
    }
这个算法至少可以这样优化一下。虽然也很丑陋。
引用 5 楼 w2009_369 的回复:
[quote=引用 2 楼 rui888 的回复:] 是这样的。笨方法
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);
					}
				}
			}
		}
有没有比较高大上的方法呢? 谢谢[/quote]
tony4geek 2014-08-06
  • 打赏
  • 举报
回复
引用 7 楼 vnvlyp 的回复:
[quote=引用 2 楼 rui888 的回复:] 是这样的。笨方法
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[/quote] 对的。是的啊,在此基础上优化。
vnvlyp 2014-08-06
  • 打赏
  • 举报
回复
引用 2 楼 rui888 的回复:
是这样的。笨方法
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
tony4geek 2014-08-06
  • 打赏
  • 举报
回复
哦。你看看循环次数能不能减少。
w009 2014-08-06
  • 打赏
  • 举报
回复
引用 2 楼 rui888 的回复:
是这样的。笨方法
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);
					}
				}
			}
		}
有没有比较高大上的方法呢? 谢谢
w009 2014-08-06
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
为什么不能出现 0+0+3=3, 0+2+1=3, 1+0+2=3,1+2+0=3
额 这个怎么解释 我需要这样的结果 0+0+3不行 因为两个数字相同, 至于0+2+1=3, 1+0+2=3,1+2+0=3 我举的例子是 如果出现0+1+2 就不能出现0+2+1=3, 1+0+2=3,1+2+0=3 如果出现0+2+1=3, 那么就是0+1+2=3,1+0+2=3,1+2+0=3 不能出现了 也就是调换顺序不可以
sunbo624 2014-08-06
  • 打赏
  • 举报
回复
好像是背包问题
tony4geek 2014-08-06
  • 打赏
  • 举报
回复
是这样的。笨方法
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);
					}
				}
			}
		}
tony4geek 2014-08-06
  • 打赏
  • 举报
回复
为什么不能出现 0+0+3=3, 0+2+1=3, 1+0+2=3,1+2+0=3

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧