欧拉工程第62题:Cubic permutations
找出最小的立方数,它的各位数的排列能够形成五个立方数
解决关键点:
这五个数的由相同的数组成的
可以用HashMap,Key是由各位数字形成的key,value记录由这几个数组成的立方数出现的次数
Key如何确定?
1.这个数的每位数排序后,(升序或降序),重新组成的数当作Key
2.根据该数0-9,出现的次数,组成的字符串当作Key
Java程序:
package project61;
import java.util.HashMap;
public class P62{
    long getKey(int[] digits){
//        这里的映射是改变原来数的顺序
//        映射后的数低位到高位的数字越来越大
//        digits数组中的数是原数对应位置出现了几次
//        可以直接将digits中的数链接起来
        long key = 0;
        for(int i=9;i>=0;i--){
            while(digits[i]!=0){
                key = key*10+i;
                digits[i]--;
            }
        }
        return key;
    }
    void run(){
        long a = 0;
        long tempa = 0;
        HashMap<Long, Integer> hm = new HashMap<Long, Integer>();
        for (long i =10000;i>111;i--){
            a = i*i*i;
            tempa = a ;
            int[] b = new int[10];
            long key=0;
            while(a!=0){
                b[(int) (a%10)] +=1 ;
                a=a/10;
            }
            key = getKey(b);
            int value = hm.get(key)==null?1:(Integer)hm.get(key)+1;
            if(value==5){
                System.out.println(tempa);
            }
            hm.put(key, value);
        }
    }
    String getKey1(int [] digits){
        // 这里只是简单的把从高位到低位链接起来
        String str="";
        for(int i=9;i>=0;i--)
            str+=digits[i]+"";
        return str;
    }
    void run1(){
        long a = 0;
        long tempa = 0;
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        long i = 10000;
        while(i>100){
            a = i*i*i;
            tempa = a ;
            int[] b = new int[10];
            String key;
            while(a!=0){
                b[(int) (a%10)] +=1 ;
                a=a/10;
            }
            key = getKey1(b);
            int value = hm.get(key)==null?1:(Integer)hm.get(key)+1;
            if(value==5){
                System.out.println(tempa);
            }
            hm.put(key, value);
            i = i - 1;
        }
    }
    public static void main(String[] args)  {
        long begin= System.currentTimeMillis();
        new P62().run1(); //127035954683
        long end = System.currentTimeMillis();
        long Time = end - begin;
        System.out.println("Time:"+Time/1000+"s"+Time%1000+"ms");
    }
}
上面的程序有个小问题:是以递减的顺序找的值,但是输出来两个结果,小的那个是答案。
Python程序:
import time as time
clock = time.time()
P = {}
C = {}
i = 1
j = 5
while True:
    c=i*i*i
    k= ''.join(sorted(str(c)))
    if k in P:
        P[k] +=1
        if P[k] ==j:
            print C[k]
            break
    else:
        P[k] = 1
        C[k] =c
    i = i + 1
print('TIME :',time.time() - clock,'seconds')
上面的Python程序很不错,定义两个字典,一个存放key,以及出现的次数value,一个是用来存放出现的第一个数,key一样,value是这个数的大小。
欧拉工程第62题:Cubic permutations的更多相关文章
- 欧拉工程第69题:Totient maximum
		
题目链接 欧拉函数φ(n)(有时也叫做phi函数)可以用来计算小于n 的数字中与n互质的数字的个数. 当n小于1,000,000时候,n/φ(n)最大值时候的n. 欧拉函数维基百科链接 这里的是p是n ...
 - 欧拉工程第70题:Totient permutation
		
题目链接 和上面几题差不多的 Euler's Totient function, φ(n) [sometimes called the phi function]:小于等于n的数并且和n是互质的数的个 ...
 - 欧拉工程第68题:Magic 5-gon ring
		
题目链接 任意一条线上的三个数的和都等于9,顺时针,从最小的外圈开始,得到的序列是:432621213 和 序列 9位的字符串:三角环所能形成的最大字符串为432621513. ...
 - 欧拉工程第67题:Maximum path sum II
		
By starting at the top of the triangle below and moving to adjacent numbers on the row below, the ma ...
 - 欧拉工程第66题:Diophantine equation
		
题目链接 脑补知识:佩尔方差 上面说的貌似很明白,最小的i,对应最小的解 然而我理解成,一个循环的解了,然后就是搞不对,后来,仔细看+手工推导发现了问题.i从0开始变量,知道第一个满足等式的解就是最小 ...
 - 欧拉工程第65题:Convergents of e
		
题目链接 现在做这个题目真是千万只草泥马在心中路过 这个与上面一题差不多 这个题目是求e的第100个分数表达式中分子的各位数之和 What is most surprising is that the ...
 - 欧拉工程第61题:Cyclical figurate numbers
		
---恢复内容开始--- 题目链接 从三角数开始,循环到八角数,再到三角数,求这6个数的和 这个比较复杂,代码在网上找的 Java: package project61; import java.ut ...
 - 欧拉工程第56题:Powerful digit sum
		
题目链接 Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; im ...
 - 欧拉工程第55题:Lychrel numbers
		
package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; import java.util ...
 
随机推荐
- Centos6.4版本下搭建LAMP环境
			
Centos6.4版本下搭建LAMP环境 配置yum mkdir/mnt/cdrom mount/dev/cdrom /mnt/cdrom 装载光盘 vi /etc/yum.repos.d/Cent ...
 - 【WinForm】线程中向listview添加数据
			
在使用listview的时候,因为处理的数据较多,为防止在处理数据时出现假死的状态出现卡的情况,我们使用委托进行处理添加数据 定义委托 private delegate void AddListVie ...
 - ckeditor增加上传图片的功能
			
1.配置config.js开启图片上传选项卡. CKEDITOR.editorConfig = function( config ) { config.filebrowserImageUploadUr ...
 - 配置Windows 2008 R2 64位 Odoo 8.0/9.0 源码开发调试环境
			
安装过程中,需要互联网连接下载python依赖库: 1.安装: Windows Server 2008 R2 x64标准版 2.安装: Python 2.7.10 amd64 到C:\Python27 ...
 - Javascript(JS)中的大括号{}和中括号[]详解
			
一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...
 - Vim自动补全神器:YouCompleteMe
			
第一次听说这个插件还是在偶然的情况下看到别人的博客,听说了这个插件的大名.本来打算在实训期间来完成安装的,无奈网实在不给力,也就拖到了回家的时候.在开始准备工作的时候就了解到这个插件不是很容易安装,安 ...
 - itertools模块速查
			
学习itertools模块记住这张表就OK了 参考:http://docs.python.org/2/library/itertools.html#module-itertools Infinite ...
 - ORACLE 11G R2 修改"用户名"
			
SQL> create pfile from spfile; 修改pfile文件,添加隐含参数 *._enable_rename_user='TRUE',将数据库以restrict方式启动 1. ...
 - Kill 所有MySQL进程
			
如果在单机上安装了N多mysql数据库单实例,不再使用的情况下,想关闭所有进程,方法很简单的了,哈哈哈. kill -9 `ps -ef|grep DataServer|awk '{print $2} ...
 - mysql日志文件
			
mysql的数据文件夹里出现mysql-bin日志文件,通过my.cnf注释掉log后,是否可以删除了? 参考 http://database.51cto.com/art/201107/278988. ...