题目链接

找出最小的立方数,它的各位数的排列能够形成五个立方数

解决关键点:

这五个数的由相同的数组成的

可以用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的更多相关文章

  1. 欧拉工程第69题:Totient maximum

    题目链接 欧拉函数φ(n)(有时也叫做phi函数)可以用来计算小于n 的数字中与n互质的数字的个数. 当n小于1,000,000时候,n/φ(n)最大值时候的n. 欧拉函数维基百科链接 这里的是p是n ...

  2. 欧拉工程第70题:Totient permutation

    题目链接 和上面几题差不多的 Euler's Totient function, φ(n) [sometimes called the phi function]:小于等于n的数并且和n是互质的数的个 ...

  3. 欧拉工程第68题:Magic 5-gon ring

    题目链接 任意一条线上的三个数的和都等于9,顺时针,从最小的外圈开始,得到的序列是:432621213 和             序列 9位的字符串:三角环所能形成的最大字符串为432621513. ...

  4. 欧拉工程第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 ...

  5. 欧拉工程第66题:Diophantine equation

    题目链接 脑补知识:佩尔方差 上面说的貌似很明白,最小的i,对应最小的解 然而我理解成,一个循环的解了,然后就是搞不对,后来,仔细看+手工推导发现了问题.i从0开始变量,知道第一个满足等式的解就是最小 ...

  6. 欧拉工程第65题:Convergents of e

    题目链接 现在做这个题目真是千万只草泥马在心中路过 这个与上面一题差不多 这个题目是求e的第100个分数表达式中分子的各位数之和 What is most surprising is that the ...

  7. 欧拉工程第61题:Cyclical figurate numbers

    ---恢复内容开始--- 题目链接 从三角数开始,循环到八角数,再到三角数,求这6个数的和 这个比较复杂,代码在网上找的 Java: package project61; import java.ut ...

  8. 欧拉工程第56题:Powerful digit sum

    题目链接   Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; im ...

  9. 欧拉工程第55题:Lychrel numbers

    package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; import java.util ...

随机推荐

  1. NSS_05 数据访问选型

    在数据访问层上很想用orm框架, 选用Nhibernate或ef, 可以直接操作类对象, 避免转换, 更加的面向对象,更重要的是开发起来就方便多了. 但是从网上了解到这些框架太高级了, 用得不好到时会 ...

  2. mvc涉及到input设置了disabled

    在做网站管理后台的用户修改功能时,由于当前用户修改个人信息时规定用户名不能修改,故使用了input标签的disabled属性,但是在提交数据后却发现用户名显示为空了.后来一查才知道input设置为di ...

  3. PHP+AJAX无刷新返回天气预报

    AjaxJavaScript天气预报php天气预报,用php来写一个天气预报的模块. 天气数据是通过采集中国气象网站的.本来中国天气网站也给出了数据的API接口.以下是API的地址.返回的数据格式为j ...

  4. centos5.4下mysql主从复制

    centos5.4下mysql主从复制配置分享. 本文转自:http://www.jbxue.com/article/771.html 安装环境:centos 5.4 mysql版本:mysql 5. ...

  5. Android的Handler与Activity线程同步

    假设这里有同一个Runnable对象r. 可能采用的方法有: 第一种: handler.post(r); 实际上这种方法并没有调用线程someThread的start方法,而是直接调用了Runaabl ...

  6. Hive内表和外表的区别

    本文以例子的形式介绍一下Hive内表和外表的区别.例子共有4个:不带分区的内表.带分区的内表.不带分区的外表.带分区的外表. 1 不带分区的内表 #创建表 create table innerTabl ...

  7. Mininet VM设置笔记

    Mininet VM是为了加快Mininet安装,而且可以很容易在linux平台上运行. VM运行在Windows,Mac,Linux,通过VMware.VirtualBox,QEMU和KVM. 下载 ...

  8. WebAPi性能

    提高WebAPi性能   前言 WebAPi作为接口请求的一种服务,当我们请求该服务时我们目标是需要快速获取该服务的数据响应,这种情况在大型项目中尤为常见,此时迫切需要提高WebAPi的响应机制,当然 ...

  9. Java 基础学习1 -- 基础语法

    1.变量

  10. 【软件工程-Teamwork 3】团队角色分配和团队贡献分分配规则

    Part 1 团队角色分配 1.人员分配概要: Project Manager:1名 / Developer:4名 / Test: 1名 2.具体人员分配及职责: Project Manager(PM ...