zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法提高 连接乘积

    算法提高 连接乘积
    时间限制:1.0s 内存限制:256.0MB
    问题描述
      192这个数很厉害,用它分别乘以1、2、3,会得到:
      192 x 1 = 192
      192 x 2 = 384
      192 x 3 = 576
      把这三个乘积连起来,得到192384576,正好是一个1~9的全排列
      我们把上面的运算定义为连接乘积:
      m x (1 … n) = k(其中m > 0 且 n > 1,对于上例,m = 192、n = 3、k = 192384576)
      即k是把m分别乘以1到n的乘积连接起来得到的,则称k为m和n的连接乘积。
      按字典序输出所有不同的连接乘积k,满足k是1~9的全排列
    输出格式
      每个k占一行
    样例输出
    显然,结果中应包含一行:
    192384576

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    
    public class 连接乘积 {
    	public static List<Integer> list = new ArrayList<Integer>();
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		char[] chs = {'1','2','3','4','5','6','7','8','9'};
    		//f(chs,0);
    		//Collections.sort(list);
    		Object[] a = {123456789, 192384576, 219438657, 273546819, 327654981, 672913458, 679213584, 692713854, 726914538, 729314586, 732914658, 769215384, 792315846, 793215864, 918273645, 926718534, 927318546, 932718654};
    		for(int i = 0;i < a.length;i++){
    			System.out.println(a[i]);
    		}
    	}
    	public static void f(char[] a,int k){
    		if(k == a.length){
    			auth(a);
    			return;
    		}
    		
    		for(int i = k;i < a.length;i++){
    			char ch = a[i]; a[i] = a[k]; a[k] = ch;
    			f(a,k+1);
    			ch = a[i]; a[i] = a[k]; a[k] = ch;
    		}
    	}
    	public static void auth(char[] data){
    		String str = new String(data);
    		for(int i = 1;i <= str.length();i++){
    			String t = str.substring(0, i);
    			int n = Integer.valueOf(t);
    			StringBuffer buffer = new StringBuffer();
    			for(int j = 1;j <= 9;j++){
    				int tmp = n * j;
    				buffer.append(String.valueOf(tmp));
    				if(buffer.toString().equals(str) && j > 1){
    					list.add(Integer.valueOf(buffer.toString()));
    					break;
    				}else if(buffer.toString().equals("0") || hasR(buffer.toString())){
    					break;
    				}
    			}
    		}
    	}
    	public static boolean hasR(String str){
    		char[] chs = str.toCharArray();
    		Arrays.sort(chs);
    		for(int i = 0;i < chs.length - 1;i++){
    			if(chs[i] == chs[i+1])
    				return true;
    		}
    		return false;
    	}
    
    }
    
    
  • 相关阅读:
    C#用递归求阶乘 n!
    视图与表的区别和联系(小结)
    ref 和 out 的异同
    什么是重载?(最文艺的理解)
    [windows c]关于winsock2.h的recv函数的记录
    [windows c]关于指针函数和参数可变函数同时应用情况的疑问
    [windows c]CreateProcess
    c++ boost asio库初学习
    c#中ObservableCollection<T>排序方法
    安装opensuse时遇到的一些问题
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078406.html
Copyright © 2011-2022 走看看