知识大全 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

相关参考

从高到低排列,浙江省获得全国百强县(市)个数位居全国__

从高到低排列,浙江省获得全国百强县(市)个数位居全国_____。A、第3位B、第4位C、第5位D、第6位答案:A解析:由材料第二段可知,浙江省为第三位,故选A。

知识大全 Java键盘获取排列组合数,进行排列显示以及排列计算

Java键盘获取排列组合数,进行排列显示以及排列计算  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 关于各种排列组合java算法实现方法

  一利用二进制状态法求排列组合此种方法比较容易懂但是运行效率不高小数据排列组合可以使用复制代码代码如下:importjavautilArrays;  //利用二进制算法进行全排列//count://

知识大全 Java面向对象的排列组合算法

Java面向对象的排列组合算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  packageTe

知识大全 根据规律,这8个数3.7.0.7.7.4.1.5后面的第9 .10个数应该是什么

根据规律,这8个数3.7.0.7.7.4.1.5后面的第9.10个数应该是什么?答案6和1规律是第一个数加第二个数的和个位是第三个数,以此类推3+7的个位是07+0的个位是70+7的个位是77+7的个

知识大全 一个数的8倍加上10等于它的十倍,这个数是多少

一个数的8倍加上10等于它的十倍,这个数是多少?5一个数的8倍加上10等于它的10倍,这个数是多少?设该数是x:8x+10=10x;2x=10;x=5一个数的8倍加上10等于它的10倍减去8,这个数是

知识大全 一个数的七倍减8,差是10,这个数是多少

一个数的七倍减8,差是10,这个数是多少1)设所求的数为X7X-8=10X=18/72)(10+8)/7=18/7一个数的5倍减0.9乘8的积,差是10·6这个数是多少这个数是x5x-0.9*8=10

知识大全 一个数的8倍加上10等于它的10倍减去8,求这个数

一个数的8倍加上10等于它的10倍减去8,求这个数设这个数为x,得:8x+10=10x-8,  2x=18,   x=9.答:这个数是9.说明这个数的

知识大全 找规律急,4,7,10等请问第n个数是几

找规律急,4,7,10等请问第n个数是几a(1)=4a(2)=a(1)+3=7a(3)=a(2)+3=10其规律为:a(n)=4+(n-1)×3=3n+1答:第n个数为(3n+1)。找规律,—5,—2

知识大全 在excel中如何在数据中找出最大或最小的10个数?

在excel中如何在数据中找出最大或最小的10个数?excel中在数据中找出最大或最小的10个数的方法:比如你这些数据全部放在A列,那么:=LARGE(A:A,N) ——第N个最大值;=SM