`
to_zoe_yang
  • 浏览: 142338 次
  • 性别: Icon_minigender_2
  • 来自: 01
社区版块
存档分类
最新评论

Problem43

 
阅读更多

问题描述:

The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.

Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:

  • d2d3d4=406 is divisible by 2
  • d3d4d5=063 is divisible by 3
  • d4d5d6=635 is divisible by 5
  • d5d6d7=357 is divisible by 7
  • d6d7d8=572 is divisible by 11
  • d7d8d9=728 is divisible by 13
  • d8d9d10=289 is divisible by 17

Find the sum of all 0 to 9 pandigital numbers with this property.

 

 

解决问题:

 

 

package projecteuler;

import java.util.Arrays;

public class Problem43 {

	public static final Long UP = 9876543210L;
	public static final int START = 123;
	
	public static final int HIGH = 9;
	public static int[] Number = new int[9];
	public static final int[] Element = {0,1,2,3,4,5,6,7,8,9};
	
	public static final int[] prime = {2,3,5,7,11,13,17};
	public static long sum = 0;                         
	
	public static long Factorial(int number){
		long r = 1;
		
		for(int i=number; i>1; i--){
			r *= i;
		}
		
		return r;
	}
	
	public static long ai_find(int Last){
		
		Arrays.fill(Number, 0);
		int remain = Last-1;
		int high = HIGH;
		int posititon = 0;
		while(remain!=0){
			long value = Factorial(high);
			long num = 0;
			if(remain>=value){
				num = remain/value;
				remain -= value*num;
				Number[posititon] = (int)num;
			}else{
				Number[posititon] = 0;
			}
//			System.out.println("Position:"+posititon+",value:"+value+",num:"+num+",remain:"+remain);
			posititon++;
			high--;
			
		}
		
		boolean[] matcher = new boolean[10];
		Arrays.fill(matcher, false);
		
		String str = "";
		long value = 0;
		for(int i=0;i<Number.length; i++){
			int index = 0;
			for(int j=0; j<matcher.length; j++){
				if(index==Number[i]&&!matcher[j]){
					str = str + j;
					value = value*10 + j;
					matcher[j] = true;
					break;
				}
				if(!matcher[j]){
					index++;
				}
			}
		}
		
		for(int i=0; i<matcher.length; i++){
			if(!matcher[i]){
				value = value*10 + i;
				str = str + i;
			}
		}
//		System.out.println(str);
//		System.out.println("i:"+value);
		
		return value;
	}
	
	public static void find(int level, boolean[] elements, long result) {

		if (level == 0) {
			if(IsNumber(result)){
					sum += result;
			}
//			System.out.println(result);
			return;
		}
		for (int i = 0; i < elements.length; i++) {
			if (elements[i]) {
				elements[i] = false;
				long tmp = result;
				result = result * 10 + i;
				find(level - 1, elements, result);
				elements[i] = true;
				result = tmp;
			}
			// System.out.println("Level:"+level+",i:"+i+",Result:"+result);
		}
	}
	
	public static boolean IsPandigital(long number){
		boolean[] elements = new boolean[10];
		Arrays.fill(elements, true);
		if(number<=987654321){
			for(int i=1; i<10;i++){
				int cur = (int)number%10;
				if(!elements[cur]){
					return false;
				}
				number = number/10;
				elements[cur] = false;
			}
			return true;
		}else{
			for(int i=0; i<10;i++){
				int cur = (int)number%10;
				if(!elements[cur]){
					return false;
				}
				number = number/10;
				elements[cur] = false;
			}
			return true;
		}
	}
	
	public static boolean IsNumber(long number){
		long init = number;
		int divide = 1000000;
		if(number<=987654321){
			for(int i=0; i<prime.length; i++){
				long value = number/divide;
				if(value%prime[i]!=0){
					return false;
				}
				number = number %10;
				divide = divide/10;
			}
			return true;
		}else{
			number = number%1000000000;
//			System.out.println("number:"+number);
			for(int i=0; i<prime.length; i++){
				long value = number/divide;
//				System.out.println(value);
				if(value%prime[i]!=0){
					return false;
				}
				number = number%(divide*100);
				divide = divide/10;
			}
			return true;
			
		}
	}
	
	public static void main(String[] args){
		
		
		int result = 0;
		boolean[] elements= new boolean [10];
		Arrays.fill(elements, true);
		find(10, elements, result);
		
		System.out.println(IsNumber(1406357289));
		System.out.println(sum);
	}
}

 

分享到:
评论

相关推荐

    0-1-knapsack-problem-master (43)c.zip

    【标题】"0-1-knapsack-problem-master (43)c.zip" 提到的是一个与0-1背包问题相关的C语言项目。0-1背包问题是一个经典的组合优化问题,广泛应用于资源分配、物流规划等领域。在这个项目中,很可能包含了一个用C语言...

    问题43

    "problem43-main"可能是指一个主要的程序文件或者是一个包含解决问题43的代码的文件。 如果“问题43”涉及的是Python基础,可能与变量、条件语句(if-else)、循环(for和while)、函数定义、列表、字典、集合或...

    0-1-knapsack-problem-master (43).zip

    这个"0-1-knapsack-problem-master (43).zip"文件可能包含了一个关于如何解决0-1背包问题的C语言实现。C是一种底层编程语言,常用于系统编程和编写高效的算法。通过C语言来实现0-1背包问题,可以让我们深入理解算法...

    基于Go语言的Container Problem Detect System异常检测器设计源码

    该项目是一款基于Go语言的Container Problem Detect System异常检测器,源码包含2261个文件,涵盖1823个Go源文件、98个Markdown文件、51个Shell脚本文件、43个Git忽略文件、31个YAML配置文件、18个模板文件、14个...

    Andrew Stankevich Contest 45 Problem analysis

    Andrew Stankevich Contest 45是由Artem Vasilev和Pavel Krotkov两位来自ITMO大学的参赛者在2016年4月举办的北京大学集训营中进行的问题分析。这次竞赛包含了多个具体的算法问题,并针对每个问题给出了详细的解决...

    httpd-tools-2.4.37-43.module_el8.5.0+1022+b541f3b1.aarch64.rpm

    离线安装包,亲测可用

    0-1-knapsack-problem-master (44).zip

    压缩包内的"0-1-knapsack-problem-master (43).zip"可能是误写或者是一个迭代版本,通常这种文件名表示这是一个代码仓库的不同版本。为了完全理解这个挑战,我们需要查看源代码,分析算法逻辑,以及任何可能的提示或...

    httpd-manual-2.4.37-43.module_el8.5.0+1022+b541f3b1.noarch.rpm

    离线安装包,亲测可用

    0-1-knapsack-problem-master (44)c.zip

    0-1 背包问题(0-1 Knapsack ...在给定的项目"0-1-knapsack-problem-master (43)c.zip"中,很可能包含了一个用C语言实现0-1背包问题的代码示例,通过分析和理解这段代码,可以加深对这个问题及其解决方案的理解。

    httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64.rpm

    离线安装包,亲测可用

    算法设计Pebble Merging

    43 54 ``` #### 解题思路与算法设计 **1. 最小得分** 为了求解最小得分,我们需要找到一种策略,使得每次合并都尽可能减小当前合并的得分。直观上讲,我们应该优先合并石子数量较少的两堆,因为这样可以减少每次...

    算法导论部分答案 Press.Introduction.to.Algorithms.2Ed.Problem.Solution

    为了优化归并排序的运行时间,建议在输入规模小于或等于 43 时改用插入排序。 ### 知识点三:不同函数的增长率比较 文档中还给出了几种常见函数的增长率比较,这有助于理解不同算法的时间复杂度。例如,对于不同...

    The effect of time of day on problem solving and classroom behavior

    The effect of time of day on problem solving and classroom behavior Psychology in ihe Schools Volume 20....The 43 participating pupils were observed with Stonybrook Observation Code

    leetcode-problem-solving:LeetCode问题解决

    Problem Runtime Mem Usage Level 28毫秒( 93.73% ) 13.4 MB( 79.11% ) 简单 52毫秒( 94.00% ) 13.6 MB( 45.02% ) 中等的 36毫秒( 95.77% ) 13.7 MB( 73.48% ) 中等的 68毫秒( 88.56% ) ...

    实验3_克拉兹问题验证_kelazi_image43j_stoodjry_

    克拉兹问题(Kratzy Problem)是一个在计算机科学和算法理论中被广泛研究的问题,它的核心是寻找最小的非负整数解,使得一系列线性同余方程组成立。这个问题在密码学、编码理论以及计算复杂性理论等领域有重要应用。...

    程序语言设计原理习题解答

    2.2 Minimal Hardware Programming: Pseudocodes 43 2.3 The IBM 704 and Fortran 45 2.4 Functional Programming: LISP 52 2.5 The First Step Toward Sophistication: ALGOL 60 57 2.6 Computerizing ...

    The Little Book of Semaphores

    43 3.6.7 Barrier objects . . . . . . . . . . . . . . . . . . . . . . . . 44 3.7 Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.7.1 Queue hint . . . . . . . . . . . . . ....

    knapsack管理系统基于python (43).zip

    【标题】:“knapsack管理系统基于python (43).zip” 暗示了这是一个使用Python编程语言开发的背包问题(Knapsack Problem)管理系统的项目。背包问题是一种经典的优化问题,常见于计算机科学和运筹学领域,用于在...

    leetcode-problem:leetcode中问题的解决方案

    第43章 第46章 47-置换-ii.md 第48章 第49章 5个最长回文子串.md 50-powx-n.md 6字形转换.md 7-反向整数.md 9回文数101-150(数量:30) 第101章 第102章 103二叉树之字形水平遍历.md 二叉树最大深度104.md 105...

    2020版九年级英语全册Unit8CultureShapesUsLesson43AVisittoChinatown课件新版冀教版

    这篇内容主要围绕的是冀教版九年级英语全册Unit8《Culture Shapes Us》Lesson43《A Visit to Chinatown》的课程,其中涉及到的知识点主要包括词汇学习、句子翻译以及课文阅读理解。 一、词汇学习 1. underground: ...

Global site tag (gtag.js) - Google Analytics