public static void main(String[] args) {
int[] s = new int[9];
for (int i = 300; i < 999; i+=3) {
int flag = 1;
Set<Integer> set = new HashSet<>();
int a = i / 3;
int b = (i / 3) * 2;
s[0]=a%10;s[1]=a%100/10;s[2]=a/100;
s[3]=b%10;s[4]=b%100/10;s[5]=b/100;
s[6]=i%10;s[7]=i%100/10;s[8]=i/100;
for (int i1 : s) {
if (!set.add(i1) || i1 == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
System.out.println(a + "\t" + b + "\t" + i);
}
}
}
http://blog.csdn.net/houyp520...
最简单的话就是穷举9个数的排列。
优化一点就是先排除一些不可能的情况。比如中间的数是2的倍数,最后的数是3的倍数。诸如此类。
写个递归好了。。或者叫迭代?
public class Sidney {
}
刘汝佳的题啊。
枚举第一个数, 也就是1:2:3中占比1的那个数。
枚举范围是123~345。根据这个数,去计算其他两个数,然后判定是否恰好用了9个数字即可。
思路很简单,既然要让比例为1:2:3且每个数要用一次,那就直接将1,2,3各放大x倍,然后判断是否满足每个数仅出现一次即可。1只少放大100倍才能达到3位数,所以直接从123开始即可。代码如下。
int testa()
{
}