终于做出来了,不知大家还有没有更好的方法?
public class AdditionTest{ public static void main(String[] args) {
Addition.createNum();
}
}
class Addition{
public static void createNum(){
int i,j;
for(i=1234,j=21319;i<=78680&&j<=98765;i++,j++){//21319=20085+1234 78680=98765-20085
if(test(i,j)&&i+20085==j){
System.out.println(i+"+20085="+j);
}
}
}
public static boolean test(int num1,int num2){
int a[]=new int[]{0,0,0,0,0,0,0,0,0,0};
int tag=0;
for(int i=10000;i>0;i/=10){
//把num1,num2各位数字分解,作标为a[]的下标,如果a[]在这个下标的值已被修改为1,证明有重复值,返回false
if(a[num1/i]==1)
return false;
a[num1/i]=1;
if(a[num2/i]==1)
return false;
a[num2/i]=1;
num1%=i;
num2%=i;
}
return true;
}
}
/*
* 结果是
* 14982+20085=35067
* 27951+20085=48036
37941+20085=58026
41973+20085=62058
51963+20085=72048
64932+20085=85017 * */
public class AdditionTest{ public static void main(String[] args) {
Addition.createNum();
}
}
class Addition{
public static void createNum(){
int i,j;
for(i=1234,j=21319;i<=78680&&j<=98765;i++,j++){//21319=20085+1234 78680=98765-20085
if(test(i,j)&&i+20085==j){
System.out.println(i+"+20085="+j);
}
}
}
public static boolean test(int num1,int num2){
int a[]=new int[]{0,0,0,0,0,0,0,0,0,0};
int tag=0;
for(int i=10000;i>0;i/=10){
//把num1,num2各位数字分解,作标为a[]的下标,如果a[]在这个下标的值已被修改为1,证明有重复值,返回false
if(a[num1/i]==1)
return false;
a[num1/i]=1;
if(a[num2/i]==1)
return false;
a[num2/i]=1;
num1%=i;
num2%=i;
}
return true;
}
}
/*
* 结果是
* 14982+20085=35067
* 27951+20085=48036
37941+20085=58026
41973+20085=62058
51963+20085=72048
64932+20085=85017 * */
解决方案 »
- Java静态方法问题,也许无解,求高人看看有没有思路
- 使用NetBeans开发桌面应用程序时怎么控制用户权限
- 如何找到两个字符串的交集
- IE 非模式对话框返回值的问题
- 两个字符型数据如何相乘?
- 大家近来说说JAVA开源的几个有代表性的网站或者是项目吧~~~不要很大~~一般人都能看懂~~但要有用~~来者有分~~
- 初学多线程socket编程,请大家看一下有哪些问题和需要改进的地方。
- 请教Collections.copy(List dest,List src)函数,谢谢!
- 我想横着打,但他总是竖着打印。我已经设置了pageformat.setOrientaion(PageFormat.LANDSCAPES) ,问什么不行?
- 请教:如何用Java通过telnet发出命令并接收反馈
- 将一个Jframe窗口弹出到最前面,如果已经存在或者最小化了,下次调用也让它弹出到最前面,
- 关于 JDK1.3.1_08\j2sdk-1_3_1_08-solaris-sparc.sh
{
public void select()
{
for(int i = 1234; i <= 98765; ++i )
{
int j = i + 20085;
if(test(i, j))
System.out.println(i+"+20085="+j);
}
}
public boolean test(int n1, int n2)
{
boolean flag = true;
int[] a = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for(int i = 0; i < 5; ++i)
{
if(a[n1 % 10] == 1)
{
flag = false;
break;
}
a[n1%10] = 1;
if(a[n2 % 10] == 1)
{
flag = false;
break;
}
a[n2%10] = 1;
n1 /= 10;
n2 /= 10;
}
return flag;
}
public static void main(String[] args)
{
new temp().select();
}
}