知识大全 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相关参考