zoukankan      html  css  js  c++  java
  • 暴力求解 | 除法问题

    问题描述:


    难点:

    1.从n个数选择x个数进行全排列。

    解决方法:递归,分治解决。

    2.判断两个数数字的组合是否为 唯一的1~9


    java代码:

      1 import java.util.Scanner;
      2 
      3 
      4 
      5 public class Main {
      6 
      7     public static void main(String[] args) {
      8         // TODO Auto-generated method stub
      9         while(true){
     10             System.out.print("请输入ans:");
     11             Scanner scan=new Scanner(System.in);
     12             int ans =scan.nextInt();
     13             Division_Problem problem=new Division_Problem(ans);
     14             problem.solve();
     15             System.out.println();
     16         }
     17 
     18     }
     19 
     20 }
     21 
     22 class Division_Problem{
     23 
     24     int ans;
     25     Division_Problem(){};
     26     Division_Problem(int ans){this.ans=ans;}
     27     void solve(){
     28         int[][] solveSpace=A(5);//问题解空间
     29         int i,j,k;
     30         int denominator;//分母
     31         int numerator;
     32         for(i=0;i<solveSpace.length;i++){//对解空间进行遍历
     33             denominator=0;
     34             int len=solveSpace[i].length;
     35             for(j=len-1;j>=0;j--){
     36                 int tmp=solveSpace[i][j]*  (int)  Math.pow(10.0, (double)(len-1-j))  ;
     37                 denominator+=tmp;
     38             }
     39             numerator=denominator*ans;
     40             if(isDistinct(numerator,solveSpace[i])){
     41                 //构造分母的字符串
     42                 String str=new String("");
     43                 for(j=0;j<solveSpace[i].length;j++){
     44                     str+=String.valueOf(solveSpace[i][j]);
     45                 }
     46                 System.out.println(numerator+"/"+str+"="+ans);
     47             }
     48                 
     49         }
     50     }
     51     boolean isDistinct(int numerator,int[] denominator){//分子、分母
     52         boolean isUsed[]=new boolean[10];
     53         int i;
     54         for(i=0;i<10;i++) isUsed[i]=false;
     55         for(i=0;i<denominator.length;i++){
     56             isUsed[denominator[i]]=true;
     57         }
     58         int[]numeratorArr=new int[10];//将分子变成字符串
     59         int start=9;
     60         int rank=1;
     61         while(numerator>0){
     62             int tmp=numerator%10;
     63             numerator/=10;
     64             numeratorArr[start]=tmp;
     65             start--;
     66             rank++;
     67         }
     68         int a;
     69         a=0;
     70         if(start==5){
     71             start--;
     72             numeratorArr[start]=0;//高位补上0
     73         }
     74         if(start==4){
     75             for(i=start+1;i<10;i++){
     76                 if(isUsed[numeratorArr[i]]){
     77                     return false;
     78                 }
     79                 isUsed[numeratorArr[i]]=true;
     80             }
     81             for(i=0;i<10;i++)
     82                 if(!isUsed[i])
     83                     return false;
     84         }else return false;
     85         return true;
     86     }
     87     private int[][] A(int rank){
     88         int[][] re;
     89         if(rank>0){
     90             boolean isUsed[]=new boolean[10];
     91             int[][] parent=A(rank-1);
     92             int len=parent.length;
     93             if(len<=0) len=1;
     94             int row=(11-rank)*len;
     95             int col=rank;
     96             re=new int[row][col];
     97             int i,j,k;
     98             int index=0;
     99             for(i=0;i<len;i++){
    100                 //对于每一行父表,统计有哪些元素没有使用过
    101                 for(j=0;j<10;j++)isUsed[j]=false;
    102                 for(j=0;j<rank-1;j++)isUsed[parent[i][j]]=true;
    103                 for(j=0;j<10;j++){
    104                     if(!isUsed[j]){
    105                         for(k=0;k<rank-1;k++){
    106                             re[index][k]=parent[i][k];
    107                         }//拷贝父表
    108                         re[index][rank-1]=j;
    109                         index++;
    110                     }
    111                 }
    112             }
    113         }else{
    114             re=new int[0][0];
    115         }
    116         return re;
    117     }
    118 }

    输出结果:

  • 相关阅读:
    SolarWinds Orion API 远程代码执行漏洞(CVE-2020-10148)
    Lanproxy 路径遍历漏洞 (CVE-2021-3019)
    公众号文章集合-2020整理回顾
    PHPMailer远程命令执行漏洞复现
    SaltStack Shell 注入 (CVE-2020-16846)漏洞
    (CVE-2020-7961)Liferay Portal RCE 反序列化命令执行漏洞
    (CVE-2020-17530)Struts2 S2-061 远程命令执行漏洞复现
    ora-01722 无效数字
    公开课平台推荐
    PL/SQL Developer如何导出数据成sql的insert语句
  • 原文地址:https://www.cnblogs.com/TQCAI/p/7693355.html
Copyright © 2011-2022 走看看