A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 。。。。。。 于 2013-4-14 19:41 编辑

吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的。例如:1260 = 21 * 60   1827 = 21 * 87   2187 = 27 * 81  
写一个程序,找出4位数的所有吸血鬼数字
  1. package com.guojun;

  2. //import java.util.Iterator;

  3. public class Vampire {

  4. /**
  5. * @param args
  6. */
  7. public static void main(String[] args) {

  8. for (int i = 1092; i < 9999; i++) {
  9. if ((i%100)==0) {
  10. continue;
  11. }

  12. int a=i/1000;
  13. int b=i/100-10*a;
  14. int c=i/10-100*a-b*10;
  15. int d=i%10;
  16. int[] vam={a,b,c,d};
  17. for(int x=0;x<vam.length;x++)
  18. {
  19. if (vam[x]==0) {
  20. continue;

  21. }
  22. for(int y=0;y<vam.length;y++)
  23. {
  24. if (x==y) {
  25. continue;
  26. }
  27. for(int z=0;z<vam.length;z++)
  28. {
  29. if (y==z||z==x||vam[z]==0) {
  30. continue;
  31. }
  32. for(int v=0;v<vam.length;v++)
  33. {
  34. if(z==v||z==x||z==y)
  35. continue;
  36. if((vam[x]*10+vam[y])*(vam[z]*10+vam[v])==i)
  37. {

  38. System.out.println("这是个吸血鬼数"+i);
  39. break;
  40. }
  41. }
  42. }
  43. }
  44. }

  45. }

  46. }

  47. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

5 个回复

正序浏览
王洪宇 发表于 2013-4-14 10:37
看看这个吧,是否会对你有帮助。

这个题是Think in java里面的习题啊,它的答案和你的一样啊,但是我觉得这样做太复杂了啊
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
本帖最后由 王洪宇 于 2013-4-14 10:41 编辑
  1. //写一个程序 , 找出四位数中的所有吸血鬼数字 .

  2. public class VampireNumbers {

  3.     //四个方法,分别提取一个四位数的个、十、百、千位
  4.     static int a(int i) {
  5.         return i/1000;
  6.     }
  7.     static int b(int i) {
  8.         return (i%1000)/100;
  9.     }
  10.     static int c(int i) {
  11.         return ((i%1000)%100)/10;
  12.     }
  13.     static int d(int i) {
  14.         return ((i%1000)%100)%10;
  15.     }
  16.     //combine 将两个数字组合成两位数
  17.     static int com(int i, int j) {
  18.         return (i * 10) + j;
  19.     }
  20.     //判断是否符合i = m*n
  21.     static void test (int i, int m, int n) {
  22.         if(m * n == i) System.out.println(i + " = " + m + " * " + n);
  23.     }
  24.     public static void main(String[] args) {
  25.            for(int i = 1001; i < 9999; i++) {
  26.             //分别列出四个数字能够产生的排列组合方式,进行判断是否符合i = m*n;
  27.             test(i, com(a(i), b(i)), com(c(i), d(i)));
  28.            test(i, com(a(i), b(i)), com(d(i), c(i)));
  29.              test(i, com(a(i), c(i)), com(b(i), d(i)));
  30.              test(i, com(a(i), c(i)), com(d(i), b(i)));
  31.             test(i, com(a(i), d(i)), com(b(i), c(i)));
  32.               test(i, com(a(i), d(i)), com(c(i), b(i)));
  33.             test(i, com(b(i), a(i)), com(c(i), d(i)));
  34.            test(i, com(b(i), a(i)), com(d(i), c(i)));
  35.            test(i, com(b(i), c(i)), com(d(i), a(i)));
  36.            test(i, com(b(i), d(i)), com(c(i), a(i)));
  37.             test(i, com(c(i), a(i)), com(d(i), b(i)));
  38.            test(i, com(c(i), b(i)), com(d(i), a(i)));
  39.            }
  40.       }
  41. }
复制代码
看看这个吧,是否会对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
都没有人知道啊
回复 使用道具 举报
胡滨 来自手机 中级黑马 2013-4-10 23:17:57
沙发
你想要的效果?是四个数字组合方式吧?
明天用电脑看看,手机不方便。

那个输出语句后面的break貌似多余来自: Android客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马