标题:[求助]吸血鬼数字
只看楼主
J华
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-7-2
得分:0 

“吸血鬼数字”就是指位数为偶数的数字(我们算得是4位的),可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数字,其中从偶数位数字中选取的数字可以任意排列。以两个0截尾的数字是不允许的,例如:


呵呵 如果只算4位的话 换个思维方式程序看上去可能简单些  
for(i=10;i<100;i++)
{

for(j=10;j<100;j++)

m=i*j;

...........

}
  不过貌似算法复杂度还要高些.   

2007-07-26 01:07
可可熊
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:553
专家分:0
注 册:2007-6-15
得分:0 
QUOTE:
以下是引用J华在2007-7-26 1:07:58的发言:

“吸血鬼数字”就是指位数为偶数的数字(我们算得是4位的),可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数字,其中从偶数位数字中选取的数字可以任意排列。以两个0截尾的数字是不允许的,例如:


呵呵 如果只算4位的话 换个思维方式程序看上去可能简单些  
                for(i=10;i<100;i++)
                  {

                      for(j=10;j<100;j++)

                          m=i*j;

                        ...........

                   }
  不过貌似算法复杂度还要高些.                                      

还是穷举,没有什么区别。

2007-07-26 08:10
飘飘叶子
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:597
专家分:10
注 册:2005-8-17
得分:0 


public class VampireNumber {
private int num1, num2;

public static void main(String[] args) {
VampireNumber vn = new VampireNumber();
vn.printNumber();
}

public void printNumber() {
char[] ch;

//循环得到所有4位数
for(int i = 1000;i < 10000;i++) {
String s = String.valueOf(i);
ch = s.toCharArray();

leftFor(i, ch);
}
}

/**
* 将2个数字合并为一个2位数
* @param num1数字字符char类型
* @param num2数字字符char类型
* @return
*/
public int numConsolidation(char ch1, char ch2) {
String s = \"\" + ch1 + ch2;

return Integer.valueOf(s);
}

/**
* 验证是否为吸血鬼数字
* @param num
* @param num1
* @param num2
* @return
*/
public boolean isVampireNumber(int num, char[] ch) {
num1 = numConsolidation(ch[0], ch[1]);
num2 = numConsolidation(ch[2], ch[3]);

if(num == num1 * num2)
return true;

num1 = numConsolidation(ch[0], ch[1]);
num2 = numConsolidation(ch[3], ch[2]);

if(num == num1 * num2)
return true;

num1 = numConsolidation(ch[1], ch[0]);
num2 = numConsolidation(ch[2], ch[3]);

if(num == num1 * num2)
return true;

num1 = numConsolidation(ch[1], ch[0]);
num2 = numConsolidation(ch[3], ch[2]);

if(num == num1 * num2)
return true;

return false;
}

/**
* 由左边开始对数组循环
*/
public void leftFor(int num, char[] ch) {
for(int i = 1;i < ch.length;i++){
if(i != 1) {
char temp;
temp = ch[1];
ch[1] = ch[i];
ch[i] = temp;
}

if(isVampireNumber(num, ch)) {
System.out.println(num + \" 是吸血鬼数\");
break;
}
}
}
}



我也写了一个……是不是写太多了点……


向着软件工程师的目标前进!
2007-07-26 14:33
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
得分:0 
回复:(飘飘叶子)[code]public class VampireNumber...

还是您高手~!!!这才叫面向对象的编程,我那和C语言编起来的有什么两样啊~~~


爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-26 20:40
可可熊
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:553
专家分:0
注 册:2007-6-15
得分:0 
QUOTE:
以下是引用弑神饕餮在2007-7-26 20:40:03的发言:

还是您高手~!!!这才叫面向对象的编程,我那和C语言编起来的有什么两样啊~~~

确实啊,我写的JAVA代码也感觉象C,没有面向对象的思想。

2007-07-26 20:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-157811-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.926615 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved