知识大全 java实现10个数的全排列的应用

Posted 排列

篇首语:你最愿意做的那件事,才是你真正的天赋所在。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java实现10个数的全排列的应用相关的知识,希望对你有一定的参考价值。

   在校园网的论坛上看到的一些题目 放假了没有什么事做就想到了自己来试着做一些 到今天 才总是把它给做成了我想要实现的结果了 有时候就是那样 做了好久 都没办法做出来 到灵感来了的那一下 一下子就可以做出来 心里有点高兴 在这个过程中 我对JAVA的IO了解得比以前多了一点 虽然还不是很熟悉 但大概也知道怎么用了 如下   给定等式  A B C D E     其中每个字母代表一个数字 且不同数字对应不                    D F G     同字母 编程求出这些数字并且打出这个数字的             +      D F G     算术计算竖式              ───────           语句       X Y Z D E 下面是我自己的JAVA代码 里面有很大一段是人家写的 个数的全排列 我只是把修改成了JAVA import java io *;public class PaiLei     static int count= ;    private char[]  symbol= A B C D E F G X Y Z  ;    int [] num= ;    public void  check()         //System out print( 进来了呀 );        //temp  表示数字ABCDE        int temp =num[ ]* +num[ ]* +num[ ]* +num[ ]* +num[ ];        //temp 表示数字DFG        int temp =num[ ]* +num[ ]* +num[ ];        //temp 表示数字XYZDE        int temp =num[ ]* +num[ ]* +num[ ]* +num[ ]* +num[ ];        //判断表达式是不是成立        //System out print( 进入循环 );        if((temp +temp * )==temp )             count++;            System out println(temp +temp +temp );            System out println(temp );            System out println( 第 +count+ 种答案 );            print();                                                   //function方法是核心方法 就是求 个数的全排列    /** *//**        例 :将 到N的N个自然数排成一列 共有 * * ……*N种不同的排列方法 如        N= 时  有 种排列方案 分别为 试编程序输出         到N的全部排列 假设N<  为了设计出由计算机输出 到N的全部排列程序         就必须寻找不同排列之间的规律  通过观察N= (参见本例的运行结果)的排        列情况 可以发现 如果把每个排列看作一个自然数  则所有排列对应的数是        按从小到大的顺序排列 从当前的排列产生下一个排列时必然会造成某一 位        置上的数字变大 这一位置显然应该尽量靠右 并且在它左边位置上的数字保        持不变 这就意味着这一位置变成的数字来自于它的右边    并且变大的幅度        要尽可能小 也就是说在它右边如有几个 数同时比它大时 应该用其中最小的        来代替它 由于这一位置是满足上述条件的最右边的一位  所以在它右边的所        有数字按逆序排列 即在这些数字的右边没有一个大于它的数 程序中先从右        至左找到第一个位置 该位置上的数比它右边的数小 这个位置就是所要找的        满足上述条件的位置  然后再从右到左找到第一个比该位置上的数字大的数        字所在的位置 将这两个位置上的数字交换 再将该位置右边的所有元素颠倒        过来 即将它们按从小到大的顺序排列 就得到了下一个排列                     结果应该是          Input   n:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #include<iostream>         using   namespace   std;                 void   main()               int   n;                                     //n个数字的排列;               cout<< input: ;               cin>>n;               int   *p=new   int[n];                   //数组保存各位数字;               for(int   i= ;i<n;i++)             //初始化为第一个排列;                     p[i]=i+ ;               do                     for(i= ;i<n;i++)             //输出排列中的数字                           cout<<p[i]<<     ;                     cout<<endl;                                 for(int   j=n ;j> ;j )       //从右向左;找要交换的位置 (j);                           if(p[j]>p[j ])   break;                     if(j== )break;                   //找不到要交换的位置 退出do                     j ;                     for(int   k=n ;k>j;k )       //在位置 右边;从右向左;                                                         //找要交换的位置 (k);                           if(p[k]>p[j])break;                     swap(p[k] p[j]);             //交换位置 和位置 的值;                     //把位置 后边的所有位反序排列;                     for(int   x=j+ y=n ;x<y;x++ y )                           swap(p[x] p[y]);               while( );         delete   []p;                        */    public void function()throws IOException         int i temp j;        do                         check();            //write();                        for(i= ;i> ;i )                 if(num[i]>num[i ])                    break;                        if(i== )                break;            i ;            for(j= ;j>i;j )                 if(num[j]>num[i]) break;                        temp= num[j];            num[j]=num[i];            num[i]=temp;             //下面循环是            for(int x=i+ y= ;x<y;x++ y )                 temp=num[x];                num[x]=num[y];                num[y]=temp;                                while(true);        //输出正确结果的方法    public void print()             for(int j= ;j<= ;j++)                                   //输出ABCDEFGXYZ                                   System out print(symbol[j]+    );                                                      System out println();                      for(int j= ;j<= ;j++)                               //输出他们对应的值                                                System out print(num[j]+    );                                                        System out println();                        System out println(          +num[ ]+num[ ]+num[ ]+num[ ]+num[ ]);                  System out println(            +num[ ]+num[ ]+num[ ]);                  System out println(   +        +num[ ]+num[ ]+num[ ]);                  System out println(          +num[ ]+num[ ]+num[ ]+num[ ]+num[ ]);                     System out println();                          //将所有排列写入记事本    public void write()throws IOException          File myfile=new File( d:\\paiei txt );         FileOutputStream out=new FileOutputStream(myfile true);         DataOutputStream out =new DataOutputStream(out);         byte[] temp= ;         for(byte i= ;i<= ;i++)              temp[i]=(byte)num[i];         //num数组是一个int型             out writeByte(temp[i]+ );             PrintStream out =new PrintStream(out);             out print(   );            // out close();                               PrintStream out =new PrintStream(out);         out println();        // out close();//==============下面几行注释了的是 向控治台输出显示       //         ByteArrayInputStream in=new ByteArrayInputStream(temp);//         int data=in read();//         while(data!= )//             //out write(temp);//             System out print(    +data);//             data=in read();//         //         System out print( );//         in close();         out close();                     public static void main(String [] args) throws IOException             PaiLei p=new PaiLei();            p function();                            cha138/Article/program/Java/hx/201311/26328

相关参考