Java - пример программы - создание перестановок (математика)
Primary tabs
Forums:
Запустить код из командной строки можно по аналогии с этим примером.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; class SimpleTokenizer { String delimiters = "\t\n\r+*-/() "; /*Метод Tokenize возвращает массив, в котором содержатся полученные из строки str слова. В строке delimiters содержатся символы, которые мы будем считать разделителями.*/ String[] Tokenize(String str) { StringTokenizer st = new StringTokenizer(str, delimiters, true); String res[] = new String[st.countTokens()]; int i = 0; while (st.hasMoreTokens()) { String a = st.nextToken(); if(!a.startsWith(" ")) { res[i] = a; i++; } } String OutArr[] = new String[i]; for(int j = 0; (j < i); j++) OutArr[j]=res[j]; return OutArr; } } class PrinPer { void PrintPermutation(String str[]) { System.out.println("You have input the following permutation:"); System.out.print("[ "); for(int i=1; (i <= str.length); i++) { System.out.print(i+" "); } System.out.print("]\n[ "); for(int i=1; (i <= str.length); i++) { System.out.print(" "); } System.out.print("]\n[ "); for(String stroka: str) { System.out.print(stroka+" "); } System.out.println("]"); System.out.println("And its cycle representation is"); boolean satt[] = new boolean[str.length]; for(int i=0; (i < satt.length); i++) satt[i] = true; int j=0; int k; for(int i=0; (i < str.length); i++) { if ( (satt[i]==true)&(Integer.parseInt(str[i])!=(i+1)) ) { System.out.print("( "+(i+1)+" "); satt[i]=false; k = Integer.parseInt(str[i]); while (satt[k-1]==true) { System.out.print(k+" " ); satt[k-1]=false; k=Integer.parseInt(str[k-1]); } System.out.print(")"); } } boolean b=true; for(boolean boolp: satt) b &= boolp; if (b) System.out.print("( 1 )"); System.out.print("\n"); } } class Permutation { public static void main (String args[]) throws java.io.IOException { SimpleTokenizer smtk = new SimpleTokenizer(); PrinPer prpr = new PrinPer(); System.out.println("Input all natural numbers from 1 to 9 (or less) in any order\nsetting spaces only between these numbers."); boolean ExitCode = true; String InputExpr; BufferedReader br = new BufferedReader(new InputStreamReader(System.in) ); while (ExitCode) { InputExpr = br.readLine(); if ( InputExpr.equals("exit") ) ExitCode = false; else { prpr.PrintPermutation(smtk.Tokenize(InputExpr)); System.out.println("Input next permutation."); } } } }
- Log in to post comments
- 4730 reads
vedro-compota
Thu, 01/29/2015 - 21:25
Permalink
Кстати, если сдалать такой
Кстати, если сдалать такой ввод (и подобные) - то появится ошибка:
Вот такие дела)
_____________
матфак вгу и остальная классика =)