java编写吸血鬼数字?精简 2位数乘2位数得四位数,乘数跟被乘数每位上的数必须是四位数的组合。显示所有这样的四位数。如1260=21*60. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for(int i=1000;i<=9999;i++){ int num=i; int a=number/1000= int b=(num-a*1000)/100 int c=(num-a*1000-b*100)/10 int d=num-a*1000-b*100-c*10 //然后再判断比如a*10+b是否与b*10+d相等,相等就输出, 排列组合,4个数字,4个位置,要判断很多次,没有想到好的办法。} 上面我写错了,不是“a*10+b是否与b*10+d相等,相等就输出,”是判断 num==(a*10+b)*(b*10+d) 不知道效率怎么样,呵呵!!!import java.util.ArrayList;public class NumberGame { public static void main(String[] args){ ArrayList list = new ArrayList(); int a,b,c,d; for(int i=10;i<100;i++){ a = i%10; b = i/10; for(int j=10;j<100;j++){ c = j%10; d = j/10; int tmp = i*j; if(tmp<1000){ continue; } list.clear(); while(true){ list.add(tmp%10); if(tmp%10 == tmp){ break; } tmp = tmp/10; } list.remove((Object)a); list.remove((Object)b); list.remove((Object)c); list.remove((Object)d); if(list.size()!=0){ continue; } System.out.print(i+"*"+j+"="+i*j+" "); System.out.println(); } } }} 改进一下import java.util.ArrayList;public class NumberGame { public static void main(String[] args){ ArrayList list = new ArrayList(); ArrayList list1 = new ArrayList(); int a,b,c,d; for(int i=10;i<100;i++){ a = i%10; b = i/10; for(int j=10;j<100;j++){ c = j%10; d = j/10; int tmp = i*j; if(tmp<1000){ continue; } list.clear(); while(true){ list.add(tmp%10); if(tmp%10 == tmp){ break; } tmp = tmp/10; } list.remove((Object)a); list.remove((Object)b); list.remove((Object)c); list.remove((Object)d); if(list.size()!=0){ continue; } list1.add(i); if(list1.contains((Object)j)){ continue; } System.out.print(i+"*"+j+"="+i*j+" "); System.out.println(); } } }} 我有个,发出来看看,测过有结果!package com.test;import java.util.HashMap;import java.util.Map;public class FourNum { public static void main(String[] args){ for (int i=10; i<=99; i++){ for (int j=10; j<=99; j++){ int a = i/100; int b = i%10; int c = j/100; int d = j%10; int num = i*j; int a1 = num/1000; int b1 = (num - a1*1000)/100; int c1 = (num - a1*1000 - b1*100)/10; int d1 = num%10; Map<Integer, String> m = new HashMap<Integer, String>(); m.put(a1, ""); m.put(b1, ""); m.put(c1, ""); m.put(d1, ""); if (a1 != 0 && m.containsKey(a) && m.containsKey(b) && m.containsKey(c) && m.containsKey(d)){ System.out.println(num+" "+i+" "+j); } } } }} 不想动脑子,动动嘴巴应该可以把一些不可能出现的case排除掉吧。比如某些数字相乘不可能到四位数,某些数字相乘会成为5位数等等帮推good luck if判断中第一个就是要求num为4位数其他判断就是要求a,b,c,d和a1,b1,c1,d1中组合相等,用HashMap里key值包含比较简便,如果用判断(a==a1 && b==b1 && c==c1 && d==d1) ||(a==b1 && b==a1 && c==c1 && d==d1) ||....来穷举也可以,不过看着有点烦 public class XiXieGui{ public static void main(String[] args){ String[] ar_str1,ar_str2; int sum=0; for(int i=10;i<100;i++){ for(int j=i+1;j<100;j++){ int i_val=i*j; if(i_val<1000||i_val>9999) continue; //积小于1000或大于9999排除,继续下一轮环 ar_str1=String.valueOf(i_val).split(""); ar_str2=(String.valueOf(i)+String.valueOf(j)).split(""); java.util.Arrays.sort(ar_str1); java.util.Arrays.sort(ar_str2); if(java.util.Arrays.equals(ar_str1, ar_str2)){ //排序后比较,为真则找到一组 sum++; System.out.println("第"+sum+"组: "+i+"*"+j+"="+i_val); } } } System.out.println("共找到"+sum+"组吸血鬼数"); }} 到底要学什么?程序员的竞争点在哪? 问题求解 velocity的一些问题 如何自动升级自己开发的软件? 如何判断一个数字 字符串里是否有某个数字 如何同时编辑Table中的多个单元格 java程序如何读出word文档中的文本而舍弃非文本信息? 请问哪里有 Sun J2SE V1.4.2 JRE 完整安装简体中文版 for Windows 下载? 注意:不是Sun公司主页提供的那种网络安装版。 请教:关于java中的压缩处理 jb6中我如何得到tomcat的执行要目录呢? 接口 List<E> 这个E指的是什么?? 帮我看一下是什么错误!
{
int num=i;
int a=number/1000=
int b=(num-a*1000)/100
int c=(num-a*1000-b*100)/10
int d=num-a*1000-b*100-c*10 //然后再判断比如a*10+b是否与b*10+d相等,相等就输出,
排列组合,4个数字,4个位置,要判断很多次,没有想到好的办法。
}
上面我写错了,不是“a*10+b是否与b*10+d相等,相等就输出,”是判断 num==(a*10+b)*(b*10+d)
public static void main(String[] args){
ArrayList list = new ArrayList();
int a,b,c,d;
for(int i=10;i<100;i++){
a = i%10;
b = i/10;
for(int j=10;j<100;j++){
c = j%10;
d = j/10;
int tmp = i*j;
if(tmp<1000){
continue;
}
list.clear();
while(true){
list.add(tmp%10);
if(tmp%10 == tmp){
break;
}
tmp = tmp/10;
}
list.remove((Object)a);
list.remove((Object)b);
list.remove((Object)c);
list.remove((Object)d);
if(list.size()!=0){
continue;
}
System.out.print(i+"*"+j+"="+i*j+" ");
System.out.println();
}
}
}
}
public static void main(String[] args){
ArrayList list = new ArrayList();
ArrayList list1 = new ArrayList();
int a,b,c,d;
for(int i=10;i<100;i++){
a = i%10;
b = i/10;
for(int j=10;j<100;j++){
c = j%10;
d = j/10;
int tmp = i*j;
if(tmp<1000){
continue;
}
list.clear();
while(true){
list.add(tmp%10);
if(tmp%10 == tmp){
break;
}
tmp = tmp/10;
}
list.remove((Object)a);
list.remove((Object)b);
list.remove((Object)c);
list.remove((Object)d);
if(list.size()!=0){
continue;
}
list1.add(i);
if(list1.contains((Object)j)){
continue;
}
System.out.print(i+"*"+j+"="+i*j+" ");
System.out.println();
}
}
}
}
import java.util.Map;public class FourNum {
public static void main(String[] args){
for (int i=10; i<=99; i++){
for (int j=10; j<=99; j++){
int a = i/100;
int b = i%10;
int c = j/100;
int d = j%10;
int num = i*j;
int a1 = num/1000;
int b1 = (num - a1*1000)/100;
int c1 = (num - a1*1000 - b1*100)/10;
int d1 = num%10;
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(a1, "");
m.put(b1, "");
m.put(c1, "");
m.put(d1, "");
if (a1 != 0 && m.containsKey(a) && m.containsKey(b) && m.containsKey(c) && m.containsKey(d)){
System.out.println(num+" "+i+" "+j);
}
}
}
}
}
比如某些数字相乘不可能到四位数,某些数字相乘会成为5位数等等帮推good luck
其他判断就是要求a,b,c,d和a1,b1,c1,d1中组合相等,用HashMap里key值包含比较简便,如果用判断
(a==a1 && b==b1 && c==c1 && d==d1) ||
(a==b1 && b==a1 && c==c1 && d==d1) ||
....
来穷举也可以,不过看着有点烦
public static void main(String[] args){
String[] ar_str1,ar_str2;
int sum=0;
for(int i=10;i<100;i++){
for(int j=i+1;j<100;j++){
int i_val=i*j;
if(i_val<1000||i_val>9999) continue; //积小于1000或大于9999排除,继续下一轮环
ar_str1=String.valueOf(i_val).split("");
ar_str2=(String.valueOf(i)+String.valueOf(j)).split("");
java.util.Arrays.sort(ar_str1);
java.util.Arrays.sort(ar_str2);
if(java.util.Arrays.equals(ar_str1, ar_str2)){
//排序后比较,为真则找到一组
sum++;
System.out.println("第"+sum+"组: "+i+"*"+j+"="+i_val);
}
}
}
System.out.println("共找到"+sum+"组吸血鬼数");
}
}