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
- 5499 reads
vedro-compota
Thu, 01/29/2015 - 21:25
Permalink
Кстати, если сдалать такой
Кстати, если сдалать такой ввод (и подобные) - то появится ошибка:
Вот такие дела)
_____________
матфак вгу и остальная классика =)