收录日期:2019/05/22 09:19:58 时间:2016/08/06 15:38:35 标签:Java SE

public class VampireNum {
public static void main(String[] args) {
int i, a, b, c, d;
for (i = 1111; i <= 9999; i++) {
if (i % 100 != 0) {
a = i / 1000;
b = i / 100 % 10;
c = i / 10 % 10;
d = i % 10;
if ((a > 0 && c > 0) && (a * 10 + b) * (c * 10 + d) == i
|| (a * 10 + d) * (c * 10 + b) == i) {
System.out.println(i);
}
if ((a > 0 && b > 0) && (a * 10 + c) * (b * 10 + d) == i
|| (a * 10 + d) * (b * 10 + c) == i) {
System.out.println(i);
}
if ((a > 0 && d > 0) && (a * 10 + b) * (d * 10 + c) == i
|| (a * 10 + c) * (d * 10 + a) == i) {
System.out.println(i);
}
if ((b > 0 && c > 0) && (b * 10 + a) * (c * 10 + d) == i
|| (b * 10 + d) * (c * 10 + a) == i) {
System.out.println(i);
}
if ((b > 0 && d > 0) && (b * 10 + a) * (d * 10 + c) == i
|| (b * 10 + c) * (d * 10 + a) == i) {
System.out.println(i);
}
if ((c > 0 && d > 0) && (d * 10 + b) * (c * 10 + a) == i
|| (d * 10 + a) * (c * 10 + b) == i) {
System.out.println(i);
}
}
}

}
}

结果:
1260
1395
1435
1530
1827
2187
6880
求优化!
建立一个计算判断方法 多次调用,这个只是简化了代码的量,但是算法上没有变化。
这个你的算法的目的?说明?
引用 2 楼 jc8futao 的回复:
这个你的算法的目的?说明?

  吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字:
   1260 = 21 * 60
   1827 = 21 * 87
   2187 = 27 * 81 
第一次听, 不过我还是不太明白
谈不上效率。写着玩
public static void main(String[] args)
{
for (int i = 10; i<100; i++)
{
for (int j = 10; j<=i; j++)
{
String s1 = String.valueOf(i)+String.valueOf(j);
char[] a1 = s1.toCharArray();
Arrays.sort(a1);

String s2 = String.valueOf(i*j);
char[] a2 = s2.toCharArray();
Arrays.sort(a2);

if (Arrays.toString(a1).equals(Arrays.toString(a2)))
{
System.out.printf("%d*%d=%d\n", i, j, i*j);
}
}
}
}
    for (int x = 10; x <= 99; x++) {
      int z;
      outer: for (int y = Math.max(x, 1000 / x); y <= 99 && (z = x * y) <= 9999; y++) {
        if (z < 1000) {
          continue;
        }
        int[] count1 = new int[10];
        int[] count2 = new int[10];
        count1[z / 1000]++;
        count1[z % 1000 / 100]++;
        count1[z % 100 / 10]++;
        count1[z % 10]++;
        count2[x/10]++;
        count2[x%10]++;
        count2[y/10]++;
        count2[y%10]++;
        for (int i = 0; i < count1.length; i++) {
          if (count1[i] != count2[i]) {
            continue outer;
          }
        }
        System.out.printf("%d * %d = %d%n", x, y, z);
      }
    }
x * y = z,且10 <= x <= y <= 99 AND 1000 <= z <= 9999
我虽然是for嵌套,遍历x,y,lz是单层for遍历z,但实际上循环次数比lz少,lz是九千次,我才三千多
引用 5 楼 gukuitian 的回复:
谈不上效率。写着玩
Java code
public static void main(String[] args)
    {
        for (int i = 10; i<100; i++)
        {
            for (int j = 10; j<=i; j++)
            {
                String s1 = Str……

思路很好,代码量少,不错。
这种算法,我的走几遍才能看懂。多谢指教!
引用 7 楼 shine333 的回复:
x * y = z,且10 <= x <= y <= 99 AND 1000 <= z <= 9999
我虽然是for嵌套,遍历x,y,lz是单层for遍历z,但实际上循环次数比lz少,lz是九千次,我才三千多

看看。不错!
引用 7 楼 shine333 的回复:
x * y = z,且10 <= x <= y <= 99 AND 1000 <= z <= 9999
我虽然是for嵌套,遍历x,y,lz是单层for遍历z,但实际上循环次数比lz少,lz是九千次,我才三千多

System.currentTimeMillis()
用这个测的值 怎么你的还会比我的高呢?

vc2005 mfc 中使用activex给控件定义的变量不能引用 如何减少这个递归的内存占用呢 大家帮我解决个问题 关于vb.net中的axsstab控件的使用,请帮助 。。。 界面设计(关于TABLE) 请问从官网下的VS2008TeamSuite90天试用版有7个文件,应该如何安装? flash组件?? 设计模式实用性得问题(工厂) 线程死锁怎么解决(概念) 已知一个文本文件,如何确定一个词组在文件中是否有匹配?实在不会,苦求! 静态页面点击数显示不出来?怎么办 document.write 无效 我是编程文盲,上机写小程序电脑要有什么软件啊 请教一个socket传输的问题! 怎么在一个工程里把2个源文件连到一起编译啊 Java的JMenuItem如何类似MFC中的菜单项可以在被选中时在旁边显示“√ ” java存储机制 java存储机制 ADODB.Recordset 错误 \'800a0bb9\' (急) 关于抽象类与接口理解及其它问题 外网访问内网的tomcat ###【公告】2007年的帖子已经结贴完毕,请各位活跃的朋友查看各自并汇报一下去年的收入情况 灌水第一帖,来挣可用分 excel,如何自筛选结果中选择并复制隐藏的列 紧急求救 一名计算机专业毕业生的虚心求教! majia_of_run等反动派同志请你们脑袋清醒点。 一名计算机专业毕业生的虚心求教! 一名计算机专业毕业生的虚心求教! 一名计算机专业毕业生的虚心求教! 一名计算机专业毕业生的虚心求教!