用java实现

深巷胡同 2018-05-10 10:51:27
求知道,思路都不清晰
...全文
963 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
an_liu 2018-05-12
  • 打赏
  • 举报
回复
多了个 color: #FF0000;">" 删掉就好了
public static void main(String[] args) {
        int i = 12578;
        int count=1;
        //为了方便遍历
        HashMap<Integer,Integer> map = new HashMap<>();

       // 数数
        while(i != 98752) {
            String s ="";
            s+=i;

            // 正则: 不能重复,不能是0346 ,长度等于5
            if(s.matches("(?!\\d*(\\d)\\d*\\1\\d*)[^0346]{5}")) {
                if(Integer.parseInt(s)%75 == 0) {
                    int num = Integer.parseInt(s);
                    map.put(count, num);
                    count++;
                }
            }
            i++;
        }

        //遍历
        for (Integer key : map.keySet()) {
            System.out.println("第"+key+"个是"+map.get(key));
        }

    }
}
an_liu 2018-05-12
  • 打赏
  • 举报
回复
其实就是考正则
    public static void main(String[] args) {
        int i = 12578;
        int count=1;
        //为了方便遍历
        HashMap<Integer,Integer> map = new HashMap<>();

       // 数数
        while(i != 98752) {
            String s ="";
            s+=i;

            // 正则: 不能重复,不能是0346 ,长度等于5
            if(s.matches("(?!\\d*(\\d)\\d*\\1\\d*)[^0346]{5}")) {
                if(Integer.parseInt(s)%75 == 0) {
                    int num = Integer.parseInt(s);
                    map.put(count, num);
                    count++;
                }
            }
            i++;
        }

        //遍历
        for (Integer key : map.keySet()) {
            System.out.println("第"+key+"个是"+map.get(key));
        }

    }
天行归来 2018-05-11
  • 打赏
  • 举报
回复
引用 4 楼 maradona1984 的回复:
[quote=引用 3 楼 lynmison 的回复:] 1、五位数范围是 10000~99999,可以算出循环的范围 14~1333 2、循环算出能被75整除数 3、用正则过滤不符合要求结果和符合要求结果

	private static boolean matched(String content){
		if (content.contains("0")) return false;
		
		String regEx = "(?!\\d*(\\d)\\d*\\1\\d*)\\d{5}";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(content);
		return m.find();
	}

	public static void main(String[] args){
		int l = 10000/75;
		int h = 99999/75;
		int result;
		for(int i=l; i<=h; i++){
			result = i*75;
			String tmp = String.format("%d", result);
			if (matched(tmp)) System.out.println(tmp+":matched");
			else System.out.println(tmp+":not matched");
		}
	}
是个新思路,但正则这块并不太符合需求吧...6个数字出现5次即符合要求,indexOf也可以的[/quote] 正则就是5位数不出现重复数字,如果有问题,正则调整下就可以。结果如下: 12375 12675 12975 13275 13425 13725 13875 14325 14625 14925 16275 16425 16725 16875 17325 17625 17925 18375 18675 18975 19275 19425 19725 19875 21375 21675 21975 23175 23475 24375 24675 24975 26175 26475 29175 29475 31275 31425 31725 31875 32175 32475 34125 34275 34725 34875 36825 36975 37125 37425 38175 38475 38625 38925 39675 39825 41325 41625 41925 42375 42675 42975 43125 43275 43725 43875 46125 46275 46725 46875 47325 47625 47925 48375 48675 48975 49125 49275 49725 49875 61275 61425 61725 61875 62175 62475 63825 63975 64125 64275 64725 64875 67125 67425 68175 68325 68475 68925 69375 69825 71325 71625 71925 73125 73425 74325 74625 74925 76125 76425 79125 79425 81375 81675 81975 83175 83475 83625 83925 84375 84675 84975 86175 86325 86475 86925 89175 89325 89475 89625 91275 91425 91725 91875 92175 92475 93675 93825 94125 94275 94725 94875 96375 96825 97125 97425 98175 98325 98475 98625
竹子_bamboo 2018-05-11
  • 打赏
  • 举报
回复
首先,六个数组成五个数且一个数最多出现一次,所以就有6 * 5 * 4 * 3 * 2种情况,然后这个数还要被75整除,那就是取余为0就满足情况,难点在于如何将组合的数字整理出来
qq_22880091 2018-05-11
  • 打赏
  • 举报
回复
import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { String[] numArr = new String[]{"1","2","5","7","8","9"}; int value = 75; List<Integer> numList = getAllNumList(numArr,value); System.out.println(numList); } private static List<Integer> getAllNumList(String[] numArr,int value) { List<Integer> numList = new ArrayList<Integer>(); //六个数字里面取五个 List<List<String>> newNumArr = getNewNumArr(numArr); List<String> sl = null; for(List<String> list : newNumArr){ sl = new ArrayList<String>(); getAllStr(list, new StringBuffer(), sl); for(String s : sl){ if(Integer.valueOf(s)%value==0) numList.add(Integer.valueOf(s)); } } return numList; } private static List<List<String>> getNewNumArr(String[] numArr) { List<String> numList = new ArrayList<String>(); for(String num : numArr){ numList.add(num); } List<List<String>> numlistAll = new ArrayList<List<String>>(); List<String> numListForSave = null; for(String num : numArr){ numListForSave = clone(numList); numListForSave.remove(num); numlistAll.add(numListForSave); } return numlistAll; } private static List<String> clone(List<String> numList) { List<String> cloneList = new ArrayList<String>(); if(numList!=null && numList.size()>0) for(String s : numList) cloneList.add(s); return cloneList; } private static void getAllStr(List<String> str, StringBuffer sb,List<String> sl) { if(str.size()>0){ List<String> clone = null; for(String s : str){ sb = new StringBuffer(sb); sb.append(s); clone = clone(str); clone.remove(s); getAllStr(clone, sb,sl); sb = new StringBuffer(sb.substring(0, sb.length()-1)); } }else{ sl.add(sb.toString()); } } }
maradona1984 2018-05-11
  • 打赏
  • 举报
回复
引用 3 楼 lynmison 的回复:
1、五位数范围是 10000~99999,可以算出循环的范围 14~1333 2、循环算出能被75整除数 3、用正则过滤不符合要求结果和符合要求结果

	private static boolean matched(String content){
		if (content.contains("0")) return false;
		
		String regEx = "(?!\\d*(\\d)\\d*\\1\\d*)\\d{5}";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(content);
		return m.find();
	}

	public static void main(String[] args){
		int l = 10000/75;
		int h = 99999/75;
		int result;
		for(int i=l; i<=h; i++){
			result = i*75;
			String tmp = String.format("%d", result);
			if (matched(tmp)) System.out.println(tmp+":matched");
			else System.out.println(tmp+":not matched");
		}
	}
是个新思路,但正则这块并不太符合需求吧...6个数字出现5次即符合要求,indexOf也可以的
天行归来 2018-05-11
  • 打赏
  • 举报
回复
1、五位数范围是 10000~99999,可以算出循环的范围 14~1333 2、循环算出能被75整除数 3、用正则过滤不符合要求结果和符合要求结果

	private static boolean matched(String content){
		if (content.contains("0")) return false;
		
		String regEx = "(?!\\d*(\\d)\\d*\\1\\d*)\\d{5}";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(content);
		return m.find();
	}

	public static void main(String[] args){
		int l = 10000/75;
		int h = 99999/75;
		int result;
		for(int i=l; i<=h; i++){
			result = i*75;
			String tmp = String.format("%d", result);
			if (matched(tmp)) System.out.println(tmp+":matched");
			else System.out.println(tmp+":not matched");
		}
	}
java-小学生 2018-05-11
  • 打赏
  • 举报
回复
public static void main(String[] args) { //125789组成一个五位数至多用一次能被75整除有几个? List<Integer> list = new ArrayList<>(); List<Integer> results = new ArrayList<>(); list.add(1); list.add(2); list.add(5); list.add(7); list.add(8); list.add(9); int count = 0; while (true) { Collections.shuffle(list); StringBuffer sb = new StringBuffer(); for (int i = 0; i < list.size() - 1; i++) { sb.append(list.get(i)); } String s = sb.toString(); int result = Integer.parseInt(s); if ((result % 75) == 0 && !(results.contains(result))) { count++; results.add(result); System.out.println(count + "......." + result); } } } 控制台: 1.......92175 2.......21975 3.......91275 4.......81975 5.......19275 6.......91875 7.......29175 8.......19725 9.......97125 10.......17925 11.......71925 12.......19875 13.......12975 14.......91725 15.......98175 16.......18975 17.......79125 18.......89175 做的不好,初步实现
maradona1984 2018-05-11
  • 打赏
  • 举报
回复
笨方法就排列组合 https://blog.csdn.net/yhyr_ycy/article/details/52523243 然后整除 稍微聪明的方法 最后一位只能是0,5,给的数字中只有5,那就是5个数排列组合,倒数第二位的数只可能是2,7 所以[1,2,8,9],[1,7,8,9]两个4选3的排列 当然代码实现没啥区别,只是第二个效率稍微高一些

50,749

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧