吸血鬼数解题思路

《Java编程思想》中有这样一道题:

  • 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到。而这两位数字必须包含乘积的所有数字(顺序可以任意排序),能够被100整除的数是不允许的:

例如以下都是吸血鬼:

1260=21*60

1827=21*81

2187=27*81

那我们来分析一下题:

给了我们以下几个有用的条件:

  • 由两位数相乘而得到并且包含乘积的所有数,说明乘积必须为4位(那范围必须在1000到9999之间)
  • 不能被100整除

既然是两位数字相乘而得到那么范围就控制在:10~99,必须包含乘积的所有数字那么就表示乘积和这两对数一定要相同,这里我们可以用数组来进行比较。

我们来看一下代码实现

package com.itheima.test;

import java.util.Arrays;

public class Mian {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for (int i = 10; i <100; i++) {
            //i表示第一个两位数
            for (int j = 10; j < 100; j++) {
                //j表示第二个两位数
                int product=i*j;
                //获得乘积
                if(product%100!=0&&product>999&&product<10000) {
                    //过滤条件:1不能被100整除2必须是4位数
                    String[] value1=String.valueOf(product).split("");
                    //把乘积转换为字符串,然后在以空格分割为数组
                    String[] value2=(String.valueOf(i)+String.valueOf(j)).split("");
                    //把两位数相连接为字符串,然后在以空格分割为数组
                    Arrays.sort(value1);
                    //排序一下从小到大
                    Arrays.sort(value2);
                    //排序一下从小到大
                    if (Arrays.equals(value1, value2)) {
                        //调用Arrays中的静态方法equals进行比较
                        System.out.println(i+"*"+j+"="+product);
                        //打印吸血鬼数
                    }
                }
            }
        }
    }

}

这个题就做完啦,就是那么简单

原文地址:https://www.cnblogs.com/ahJava/p/9840312.html

时间: 2024-11-09 09:26:24

吸血鬼数解题思路的相关文章

三重循环实现四位的吸血鬼数

题目:吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中抽取的数字可以任意排序.以两个0结尾的数字是不允许的.例如下列的数字都是"吸血鬼"数字: 1260=21*60 1827=21*87 2187=27*81 写一个程序,找出四位数的所有吸血鬼数. 思路:将四位数按位拆分为四个数字,由这四个数字组合成两个两位数,判断这两个数的乘积是否等于原四位数. 组合:1.两个数字之间是无序的,即21*60和60*21是等价的 2.十位

n皇后2种解题思路与代码-Java与C++实现

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进,使用了位运算. 一.问题抛出与初步解题思路 问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上. 转化规则:其实八皇后问题可以推广为更一般的n皇后

POJ 1095 Trees Made to Order 最详细的解题思路

题目来源:Trees Made to Order 题目大意:根据下面的规则给一棵二叉树编号: 规则1:如果二叉树为空,则编号为0: 规则2:如果二叉树只有一个节点,则编号为1: 规则3:所有含有m个节点的二叉树的编号小于所有含有m+1个节点的二叉树的编号: 规则4:如果一棵含有m个节点的二叉树(左子树为L,右子树为R)的编号为n,要想其它含有m个节点的二叉树的编号如果大于n,则需要满足两个条件中的任意一个:1.左子树的编号大于L的编号:2.左子树的编号等于L的编号,但是右子树的编号大于R的编号.

一道仅有7人通过的超5星微软比赛题目-------解题思路&amp;优秀代码分享,邀你来“找茬儿”

6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为题目的英文描述难以理解?还是题目本身的难度太高让很多人望而生畏知难而退? 为此我们诚邀各路英雄豪杰前来切磋探讨,共同发现: 1.解题思路:本次大赛一等奖获得者-大连理工大学学生__newSolar,提供两种解题思路: 2.代码样本:雅虎刷题狂人曹鹏专家的代码将作为样本展示,供学习借鉴: 3.“一起来找茬儿”:在所有答题者中

超5星难度【微软Core allocation】Coding赛题 - 解题思路&amp;优秀代码分享,邀你来“找茬儿”

6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为原题的英文描述难以理解?还是题目本身的难度太高让很多人望而生畏知难而退? 为此我们诚邀各路英雄豪杰前来切磋探讨,共同发现: 1. 解题思路:本次大赛一等奖获得者-大连理工大学学生__newSolar,提供两种解题思路: 2. 代码样本:雅虎刷题狂人曹鹏专家的代码将作为样本展示,供学习借鉴: 3."一起来找茬儿":

&quot;巴卡斯杯&quot; 中国大学生程序设计竞赛 - 女生专场(重现)解题思路

此文章可以使用目录功能哟↑(点击上方[+]) 经过这么一次女生赛,告诉我们千万不要小瞧女生,不然会死得很惨,orz... 链接→"巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场(重现)  Problem 1001 Solving Order Accept: 0    Submit: 0 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit : 32768/32768 K (Java/Others)  Problem Descri

实验吧-密码学解题思路及答案(一)

1.JS 解题链接: http://ctf5.shiyanbar.com/crypto/2.html eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){retur

MySQL-注释-Navicat基本使用-复杂查询练习题-解题思路-pymysql操作数据库-SQL注入-05

目录 mysql语句注释 navicat 的基本使用 特色(个人总结) 与数据服务器建立连接 创建&打开数据库.表 创建 打开 修改操作表结构 修改表结构 查询修改操作表数据 基本语句对应的操作 模型 ***** 特色功能 从数据库建立模型 模型页面基本操作 用模型设计数据库并导出 结构.数据导入导出 导出 导入 附属小功能 刷新小按钮 查看操作对应sql语句 执行时间查看 手动筛选数据 练习 数据准备 使用SQL语句导入表结构与数据 如何验证答案是否正确 题目 部分参考答案(只放了两题的) 少

9/15 越努力越幸运-思维赛(2.0)解题思路

A 题意:给一组数据和一个k,求比k小的数的个数,比较只能从最左边或者最右边开始,当数据比k大时结束 解题思路:找出数据中的最大值,如果最大值比k小,输出数据的个数,否则从前和后判断两次,输出两次比k小的个数之和 代码: #include<stdio.h>#include<math.h>#include<string.h>int main(){   int n,k,i,a[100],ans=0,flag=0,max,b=0;   while(~scanf("%