算法提高 ADV-186 排列式

来源:互联网 发布:如何举报淘宝卖家 知乎 编辑:程序博客网 时间:2024/06/01 13:32
问题描述
  7254是一个不寻常的数,因为它可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次
  输出所有这样的不同的式子(乘数交换被认为是相同的式子)
  结果小的先输出;结果相同的,较小的乘数较小的先输出。
输出格式
  每一行输出一个式子,式子中的等号前后空格、乘号(用字母x代表)前后空格
  较小的乘数写在前面
样例输出
     问题中的式子在结果中会出现一行如下:
     7254 = 39 x 186

import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;import java.util.List;import java.util.Set;public class Main{public static void main(String[] args) {List<String> list = new ArrayList<String>();for(int i=1; i<10000; i++){for(int j=1; j<i; j++){if(i*j>10000){break;}else if((i+""+j+""+i*j).length()==9){if(test(i,j,i*j)){list.add((i*j+" "+"="+" "+j+" "+"x"+" "+i));}}}}Collections.sort(list);for(int i=0; i<list.size(); i++){System.out.println(list.get(i));}}private static boolean test(int i, int j,int result) {String s = i+""+j+""+result;char [] ch = s.toCharArray();Set<Character> set = new HashSet<Character>();for(int index=0; index<ch.length; index++){set.add(ch[index]);}if(!set.contains('0') && set.size()==9){return true;}return false;}}


原创粉丝点击