欧拉工程第52题:Permuted multiples

题目链接

题目:

125874和它的二倍,251748, 包含着同样的数字,只是顺序不同。

找出最小的正整数x,使得 2x, 3x, 4x, 5x, 和6x都包含同样的数字。

这个题目相对比较简单

暴力遍历

判断x,2x,3x,4x,5x,6x是否包含的数字相同

如何判断两个数包含的数字相同?

1.

两个数字转换成字符串后:d1,d2

定义两个集合ts1,ts2,

将d1,d2的各位数都添加到集合ts1中

将d1的各位数添加到集合ts2中

最后这个两个集合相等,则,这个两个数包含相同的数字

2.

public  boolean permutation(int a, int b)
        {
            int[] nums = new int[10];
            int temp1 = a;
            int temp2 = b;
            while(temp1>0 && temp2>0)
            {
                nums[temp1%10]++;
                nums[temp2%10]--;
                temp1/=10;
                temp2/=10;
            }
            for(int c = 0;c<10;c++)
            {
                if(nums[c] != 0)
                    return false;
            }
            return true;
        }

看程序吧,描述不好了。。。

java程序:

package projecteuler51to60;

import java.util.Set;
import java.util.TreeSet;

class level52{    
    void solve0(){
        int Max_Value=1000000;


        for(int i=2;i<Max_Value;++i){
            if(sameDigit(i,2*i)  &&sameDigit(i,3*i) &&
                    sameDigit(i,4*i) &&sameDigit(i,5*i) &&
                    sameDigit(i,6*i)){
                System.out.println(i);
                return;
            }
        }
    
    }
    void solve1(){
        int orig=1;
        int ans=0;
        while(ans==0){
            int count=1;
            for(int a=2;a<=6;a++){
                int b=orig*a;
                if(permutation(orig,b))
                    count++;
            }
            if(count==6)
                ans=orig;
            orig++;
        }
         System.out.println(ans);    
    }
      public  boolean permutation(int a, int b)
        {
            int[] nums = new int[10];
            int temp1 = a;
            int temp2 = b;
            while(temp1>0 && temp2>0)
            {
                nums[temp1%10]++;
                nums[temp2%10]--;
                temp1/=10;
                temp2/=10;
            }
            for(int c = 0;c<10;c++)
            {
                if(nums[c] != 0)
                    return false;
            }
            return true;
        }

    boolean sameDigit(int a,int b){
        String stra=String.valueOf(a);
        String strb=String.valueOf(b);
        Set<String> set=new TreeSet<String>();
        Set<String> setEqual=new TreeSet<String>();
        if(stra.length()!=strb.length()) return false;
        for(int i=0;i<stra.length();i++){
            set.add(stra.substring(i,i+1));
            set.add(strb.substring(i,i+1));
            setEqual.add(strb.substring(i,i+1));

        }
        return set.equals(setEqual);
    }
    

    
}
public class Problem52 {


    public static void main(String[] args){
        long begin= System.currentTimeMillis();
        new level52().solve0();
        long end = System.currentTimeMillis();
        long Time = end - begin;
        System.out.println("Time:"+Time/1000+"s"+Time%1000+"ms");
    }

}
原文地址:https://www.cnblogs.com/theskulls/p/4671967.html