前三位做出来的有分,分数依次是20,10,5。
限时60分钟。
----
要求完成下面的表达式:
*****
+ 20085
-------------
*****
要求星号分别表示从0到9的一位数字,而且不允许重复,并使上面的加法成立
----
答案如下:
Number :1 14982 + 20085---------- 35067
Number :2 27951 + 20085---------- 48036
Number :3 37941 + 20085---------- 58026
Number :4 41973 + 20085---------- 62058
Number :5 51963 + 20085---------- 72048
Number :6 64932 + 20085---------- 85017It cost:343
限时60分钟。
----
要求完成下面的表达式:
*****
+ 20085
-------------
*****
要求星号分别表示从0到9的一位数字,而且不允许重复,并使上面的加法成立
----
答案如下:
Number :1 14982 + 20085---------- 35067
Number :2 27951 + 20085---------- 48036
Number :3 37941 + 20085---------- 58026
Number :4 41973 + 20085---------- 62058
Number :5 51963 + 20085---------- 72048
Number :6 64932 + 20085---------- 85017It cost:343
{ public static void main(String[] args)
{
long t=new Date().getTime();
for(int i=10234;i<=98765;i++)
{
for(int j=10234;j<98765;j++)
{
if(i==(j+20085))
{
String temp=i+""+j;
boolean flag=true;
for(int k=0;k<temp.length();k++)
{
String s=""+temp.charAt(k);
if(temp.substring(k+1).indexOf(s)!=-1)
flag=false;
}
if(flag==true)
System.out.println(j+":"+i);
}
}
}
System.out.println((new Date().getTime()-t)/1000);
}
}
耗时29秒
for (int i = 10234; i<=(99999-20085); i++){
boolean f = true;
int j=i+20085;
String s = i+""+j;
byte [] b = s.getBytes();
Arrays.sort(b);
for (int i1=0;i1<b.length-1;i1++){
if (b[i1] == b[i1+1]) {f=false;break;}
}
if (f) System.out.println(i+ " " +j);
}
}
Result:14982 35067
27951 48036
37941 58026
41973 62058
51963 72048
64932 85017
BUILD SUCCESSFUL (total time: 1 second)
long d1 = new Date().getTime();
for (int i = 10234; i<=(98765-20085); i++){
boolean f = true;
int j=i+20085;
String s = i+""+j;
byte [] b = s.getBytes();
Arrays.sort(b);
for (int i1=0;i1<b.length-1;i1++){
if (b[i1] == b[i1+1]) {f=false;break;}
}
if (f) System.out.println(i+ " " +j);
}
System.out.println("It cost " + (new Date().getTime()-d1) + " milliseconds");
}
14982 35067
27951 48036
37941 58026
41973 62058
51963 72048
64932 85017
It cost 234 milliseconds
{ public static void main(String[] args)
{
long t=new Date().getTime();
for(int i=20085;i<=98765-20085;i++)
{
for(int j=10234;j<98765-20085;j++)
{
if((i-j)==20085)
{
String temp=i+""+j;
boolean flag=true;
for(int k=0;k<temp.length();k++)
{
String s=""+temp.charAt(k);
if(temp.substring(k+1).indexOf(s)!=-1)
flag=false;
}
if(flag==true)
System.out.println(j+":"+i);
}
}
}
System.out.println((new Date().getTime()-t)/1000);
}
}
耗时也是11s
看看我的吧,给个评价。
------------------------------------
package november.rain;
import java.util.*;/***
* 要求完成下面的表达式:
?????
+ 20085
-------------
?????
要求星号分别表示从0到9的一位数字,而且不允许重复,并使上面的加法成立
*/public class Addend {
static int COMPARED = 20085;
public static void main(String[] args) {
long s = System.currentTimeMillis();
Addend add = new Addend();
add.doExecute(getNumbers(), String.valueOf(COMPARED));
long e = System.currentTimeMillis();
System.out.println("It cost:" + (e - s));
} /**
* 判断本身是否含有相同字符。
* 完全不同,返回true。否则返回false;
*/
public boolean isDiff(String str) {
boolean diff = true;
int len = str.length();
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (str.charAt(i) == str.charAt(j)) {
diff = false;
break;
}
}
}
return diff;
} /**
* 判断两个字符串是否含有与对方相同的字符。
* 完全不同,返回true。否则返回false;
*/
public boolean isDiff(int add, int res) {
boolean diff = true;
String addend = String.valueOf(add);
String result = String.valueOf(res);
int lenAddend = addend.length();
int lenResult = result.length();
if (!isDiff(addend) || !isDiff(result)) {
return false;
}
if (lenAddend != lenResult) {
diff = false;
} else {
for (int i = 0; i < lenAddend; i++) {
if (result.indexOf(addend.charAt(i)) >= 0) {
diff = false;
break;
}
}
}
return diff;
} /**
* 根据给定的字符串找出并打印符合规则的数字。
*/
public void doExecute(ArrayList list, String compare) {
try {
int count = 0;
int add = Integer.parseInt(compare);
int added ,result;
for (int i = 0; i < list.size(); i++) {
added = Integer.parseInt((String) list.get(i));
result = added + add;
boolean right = isDiff(added, result);
if (right) {
count++;
System.out.println("\nNumber :"+count);
System.out.println(" "+added);
System.out.println(" + "+add);
System.out.println("----------");
System.out.println(" "+result);
}
}
} catch (NumberFormatException ex) {
ex.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 构造5位数并存储,其中数字可从0到9获取,但不能相同。
*/
public static ArrayList getNumbers() {
ArrayList list = new ArrayList();
int p5, p4, p3, p2, p1;
for (int i5 = 0; i5 < 10; i5++) {
p5 = i5;
for (int i4 = 0; i4 < 10; i4++) {
boolean b54 = (i5 == i4);
if (b54) {
continue;
} else {
p4 = i4;
for (int i3 = 0; i3 < 10; i3++) {
boolean b53 = (i5 == i3);
boolean b43 = (i4 == i3);
if (b53 || b43) {
continue;
} else {
p3 = i3;
for (int i2 = 0; i2 < 10; i2++) {
boolean b52 = (i5 == i2);
boolean b42 = (i4 == i2);
boolean b32 = (i3 == i2);
if (b52 || b42 || b32) {
continue;
} else {
p2 = i2;
for (int i1 = 0; i1 < 10; i1++) {
boolean b51 = (i5 == i1);
boolean b41 = (i4 == i1);
boolean b31 = (i3 == i1);
boolean b21 = (i2 == i1);
if (b51 || b41 || b31 || b21) {
continue;
} else {
p1 = i1;
String number = p5 + "" + p4 + "" +
p3 + "" + p2 + "" + p1;
list.add(number);
}
}
}
}
}
}
}
}
}
return list;
}
}