Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1185|回复: 0

*(求助)吸血鬼问题的解法 ☆

[复制链接]

该用户从未签到

发表于 2011-11-2 08:04:12 | 显示全部楼层 |阅读模式
public class xixuegui {
public static void main (String[] args) {
int i,j,k,a,b,c,d,n,m;
for(i=1001;i<9999;i++){
a=i/1000;
b=(i-a*1000)/100;
c=(i-a*1000-b*100)/10;
d=i-a*1000-b*100-c*10;

for(j=1;j<10;j++){
for(k=0;k<10;k++){
if(i==(j*1000)+(k*100)) continue;
}
}

if(i==(a*10+b)*(c*120+d)) System.out.println(i+"is xixuegui");
if(i==(a*10+b)*(d*10+c)) System.out.println(i+"is xixuegui");
if(i==(b*10+a)*(c*10+d)) System.out.println(i+"is xixuegui");
if(i==(b*10+a)*(d*10+c)) System.out.println(i+"is xixuegui");

if(i==(a*10+c)*(b*10+d)) System.out.println(i+"is xixuegui");
if(i==(a*10+c)*(d*10+b)) System.out.println(i+"is xixuegui");
if(i==(c*10+a)*(b*10+d)) System.out.println(i+"is xixuegui");
if(i==(c*10+a)*(d*10+b)) System.out.println(i+"is xixuegui");

if(i==(a*10+d)*(b*10+c)) System.out.println(i+"is xixuegui");
if(i==(a*10+d)*(c*10+b)) System.out.println(i+"is xixuegui");
if(i==(d*10+a)*(b*10+c)) System.out.println(i+"is xixuegui");
if(i==(d*10+a)*(c*10+b)) System.out.println(i+"is xixuegui");

if(i==(b*10+c)*(a*10+d)) System.out.println(i+"is xixuegui");
if(i==(b*10+c)*(d*10+a)) System.out.println(i+"is xixuegui");
if(i==(c*10+b)*(a*10+d)) System.out.println(i+"is xixuegui");
if(i==(c*10+b)*(d*10+a)) System.out.println(i+"is xixuegui");
}
}
}

qiu2助各位啊~~~这是我剛写的一个输出4wei數"吸血鬼数字"的chengxu,虽然可以正确输出,但是我觉着这個做法太麻烦了,想得到一个jian化代碼的而且高效的方法,而qie我这程序实際可以说還沒完cheng,因wei输出有重fu,而wo不希望有重复,虽然我知道一个方法,可是由于代码太多我實在觉得那样写chu来有点丢人,suo以qiu助各位帮bang我啦,小弟感激不尽~~~~~~

cha點忘了,所谓“吸血鬼数字”就是指位数wei偶数的数字(我们算得是4位的),可以由yi对数字相乘er得到,而這对數字ge包含乘積的一半位shu字,其中从偶数位数字zhong选取的数字可以任意排lie。以两个0截尾的数字是不允许的,例如:

1260=21*60

1827=21*87

2187=27*81

等等。

大家帮帮忙啊~~~~~xiao弟感激不盡啊~~~
歡迎來到Java学习者论坛,转载請注明地址:http://www.javaxxz.com.
回复

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:04:25 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

我个人感觉你可以如此试试
1:从最小的两位数到最大的两位数兩两相乘
2:再判断得到的结果是否满足你的情况
这样,明显簡单得多.
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:04:36 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

我得代码看着可能比你多,但是结构肯定比你得好~仅供参考,歡迎讨论~

package interest.bloodsucker;

public class Bloodsucker
{
private static String resultStr = null;
   
public static void main(String[] args)
{
int result = 0;
for(int i = 11; i < 100; i++)
{
for(int j = 11; j < 100; j++)
{
                result = i*j;
                checkResult(result, i , j);
}
}
}
   
private static void checkResult(int result, int i, int j)
{
if(result%100 == 0 || result < 1000 || result > 9999)
{
return;
}
int a = i/10;
int b = i%10;
int c = j/10;
int d = j%10;
        resultStr = String.valueOf(result);
        
if(checkSingleNumber(a)
                && checkSingleNumber(b)
                && checkSingleNumber(c)
                && checkSingleNumber(d))
{
            System.out.println(result + " = " + i +" * " + j + ". " + result + " is bloodsucker!");
}
}
   
private static boolean checkSingleNumber(int singleNumber)
{
if(resultStr.indexOf(String.valueOf(singleNumber)) > -1)
{
            resultStr = resultStr.replaceFirst(String.valueOf(singleNumber), "");
return true;
}
        else
{
return false;
}
}
}
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:04:48 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

就是求全排列
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:05:01 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

这个问题还挺有意思的,我没有想到更好的方法
但是,我的思路是(4位数的處理):
首先取随机数X和Y
sortBit(X*100+Y) == sortBit(X*Y),这个就是需要的數字

sortBit方法是用排序处理

比如,1957,变成有序1579

内部實现,
数字转数组1,9,5,7,然后排序,1,5,7,9
将数组组装成数字
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:05:13 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

我也正在做这个问題,我想得远点,不一定是四位數,是偶数位的就可以,
呵呵,小弟刚学Java,觉得应该先把這個数的全排列找出来,装进一个数组,然后再来计算,就是全排列怎么找,有点头痛
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:05:25 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

对了,你這个题目是在 <Java 编程思想 第四版> 上面的吗?
我想問问,你有没有下到第四版的例题的代码?
我在www.mindview.net上怎么下不了?是要用什么下載工具吗?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:05:37 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

给你点建议,用ArrayList.contains(Object elem)判断是否重复
用Arrays.equals(long[],long[])來判断兩个數组(i+j组成的数组和result单独组成的数组)是否相等来判断
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:05:49 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

這个算法比较慢,但是支持区间取數。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.Vector;

public class 吸血鬼 {
public static void main(String[] args){
        吸血鬼 ghost =new 吸血鬼();
        
for(int i=1000;i<10000;i++){
            ghost.是否吸血鬼(i);
}

}
   
public void 是否吸血鬼(int number){
final String sNumber=String.valueOf(number);
final int numberLength=sNumber.length();
        
if(numberLength%2!=0)return;
        
final ArrayList<Integer> numberArr=StringNumberToIntArray(sNumber);
final ArrayList<String> capableNumberArr=StringNumberToCapableStringArray(numberArr);
        getResult(sNumber,capableNumberArr);

}
   
public void getResult(String sNumber,
                    ArrayList<String> capableNumberArr){
        
        ArrayList<Integer> result =new ArrayList<Integer>();
int number= Integer.parseInt( sNumber);
        
for(int i=0;i<capableNumberArr.size();i++){
            String sCapableNumber=capableNumberArr.get(i);
int heightDigit = Integer.parseInt(sCapableNumber.substring(0, sNumber.length()/2));
int lowDigit=Integer.parseInt(sCapableNumber.substring(sNumber.length()/2));
if(heightDigit * lowDigit == number){
                System.out.println(number + " = " + heightDigit+" * " + lowDigit);
               
}
}

}
   
public ArrayList<Integer> StringNumberToIntArray(String args){
if(args==null)return new ArrayList<Integer>();
        
        ArrayList<Integer> result = new ArrayList<Integer>();
        
for(int i=0;i<args.length();i++){
            result.add(Integer.parseInt(args.substring(i,i+1)));
}
return result;
        
}
   
public ArrayList<String> StringNumberToCapableStringArray(ArrayList<Integer> args){
if(args==null)return new ArrayList<String>();
        TreeSet<String> result=new TreeSet<String>();
        StringNumberToCapableIntArrayRecursion(args,result,"");
        
return new ArrayList<String>(result);
}
   
public void StringNumberToCapableIntArrayRecursion(ArrayList<Integer> args,TreeSet<String> result
                                                        ,String curValue){
if(args.size()<=0){
            result.add(curValue);
return;
}
        
for(int i=0;i<args.size();i++){
            ArrayList<Integer> temp=new ArrayList(args);
            Integer addValue=temp.remove(i);
            StringNumberToCapableIntArrayRecursion(temp,result,curValue+addValue);
}
        
}
}
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:06:01 | 显示全部楼层

Re:*(求助)吸血鬼问题的解法

这个是取掉重复值的

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
import java.util.Vector;

public class 吸血鬼 {
public static void main(String[] args){
        吸血鬼 ghost =new 吸血鬼();
        
for(int i=1000;i<10000;i++){
            ghost.是否吸血鬼(i);
}

}
   
public void 是否吸血鬼(int number){
final String sNumber=String.valueOf(number);
final int numberLength=sNumber.length();
        
if(numberLength%2!=0)return;
        
final ArrayList<Integer> numberArr=StringNumberToIntArray(sNumber);
final ArrayList<String> capableNumberArr=StringNumberToCapableStringArray(numberArr);
        getResult(sNumber,capableNumberArr);

}
   
public void getResult(String sNumber,
                    ArrayList<String> capableNumberArr){
        
        ArrayList<Integer> result =new ArrayList<Integer>();
int number= Integer.parseInt( sNumber);
        
for(int i=0;i<capableNumberArr.size();i++){
            String sCapableNumber=capableNumberArr.get(i);
int heightDigit = Integer.parseInt(sCapableNumber.substring(0, sNumber.length()/2));
int lowDigit=Integer.parseInt(sCapableNumber.substring(sNumber.length()/2));
if(heightDigit * lowDigit == number){
                System.out.println(number + " = " + heightDigit+" * " + lowDigit);
return ;
}
}

}
   
public ArrayList<Integer> StringNumberToIntArray(String args){
if(args==null)return new ArrayList<Integer>();
        
        ArrayList<Integer> result = new ArrayList<Integer>();
        
for(int i=0;i<args.length();i++){
            result.add(Integer.parseInt(args.substring(i,i+1)));
}
return result;
        
}
   
public ArrayList<String> StringNumberToCapableStringArray(ArrayList<Integer> args){
if(args==null)return new ArrayList<String>();
        TreeSet<String> result=new TreeSet<String>();
        StringNumberToCapableIntArrayRecursion(args,result,"");
        
return new ArrayList<String>(result);
}
   
public void StringNumberToCapableIntArrayRecursion(ArrayList<Integer> args,TreeSet<String> result
                                                        ,String curValue){
if(args.size()<=0){
            result.add(curValue);
return;
}
        
for(int i=0;i<args.size();i++){
            ArrayList<Integer> temp=new ArrayList(args);
            Integer addValue=temp.remove(i);
            StringNumberToCapableIntArrayRecursion(temp,result,curValue+addValue);
}
        
}
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-3 00:16 , Processed in 0.448633 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表