Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package zadanie1;
- //import java.lang.reflect.Array;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Random;
- import java.util.Scanner;
- /**
- *
- * @author Matej
- */
- import java.io.*;
- import java.awt.GraphicsEnvironment;
- import java.net.URISyntaxException;
- public class Zadanie1 {
- private static int count;
- private static char[] TSA={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
- private static String vyslednaPermutacia="";
- private static List<String> listOfPermutations = new ArrayList<String>();
- private static List<Integer> pouzite = new ArrayList<Integer>();
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException {
- // TODO code application logic here
- /* Console console = System.console();
- if(console == null && !GraphicsEnvironment.isHeadless()){
- //String filename = Main.class.getProtectionDomain().getCodeSource().getLocation().toString().substring(6);
- Runtime.getRuntime().exec(new String[]{"cmd","/c","start","cmd","/k","java -jar \"" + "Zadanie1.jar" + "\""});
- }else{*/
- count=0;
- System.out.println("Zadajte velkost mnoziny: ");
- Scanner scanner2 = new Scanner(System.in);
- int n = scanner2.nextInt();
- generateString(n,TSA);
- //vyslednaPermutacia="ABCDE";
- char[] pomocnePole;
- pomocnePole=vyslednaPermutacia.toCharArray();
- Arrays.sort(pomocnePole);
- vyslednaPermutacia=new String(pomocnePole);
- permutation(vyslednaPermutacia);
- System.out.println("Prva permutacia je: ");
- System.out.println(vyslednaPermutacia);
- System.out.println("Napiste mnozinu, ktorej poradove cislo hladate (velkymi pismenami): ");
- Scanner scanner = new Scanner(System.in);
- String p = scanner.nextLine();
- System.out.println("Poradove cislo mnoziny je: ");
- System.out.println(vratK(p));
- System.out.println("Zadajte poradove cislo mnoziny, ktoru hladate: ");
- Scanner scanner3 = new Scanner(System.in);
- int n2 = scanner3.nextInt();
- System.out.println("Hladana permutacia je: ");
- System.out.println(vratPermutaciu(n2));
- System.out.println("***KONIEC PROGRAMU***");
- }
- public static void permutation(String str) {
- permutation("", str);
- }
- public static void generateString(int n, char[] TSA){
- Random nahodnyGenerator = new Random();
- //System.out.println(TSA);
- int nahodnyIndex;
- for(int i=0;i<n;i++){
- nahodnyIndex=nahodnyGenerator.nextInt(TSA.length);
- if(vyslednaPermutacia.indexOf(TSA[nahodnyIndex])>=0)
- i--;
- else
- vyslednaPermutacia=vyslednaPermutacia+TSA[nahodnyIndex];
- }
- }
- private static void permutation(String prefix, String str) {
- int n = str.length();
- if (n == 0){
- //System.out.println(prefix);
- listOfPermutations.add(prefix);
- count++;
- }
- else {
- for (int i = 0; i < n; i++)
- permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
- }
- }
- public static int factorial(int number) {
- if (number <= 1)
- return 1;
- else
- return number * factorial(number - 1);
- }
- private static int vratK(String permutacia){
- char[] hladanaPermutacia = permutacia.toCharArray();
- char[] prvaPermutacia = vyslednaPermutacia.toCharArray();
- int[] ocislovanaPermutacia = new int[permutacia.length()];
- int poradie=0;
- int k=0;
- for(int i=0; i<permutacia.length();i++){
- for(int j=0;j<permutacia.length();j++){
- if(hladanaPermutacia[i]==prvaPermutacia[j]){
- poradie=j+1;
- ocislovanaPermutacia[k++]=poradie;
- //System.out.println(poradie);
- //System.out.println(ocislovanaPermutacia[k]);
- //System.out.println(", ");
- }
- }
- }
- int[] pomocnePoleTi = new int[permutacia.length()];
- List<Integer> pouzite = new ArrayList<Integer>();
- for(int i=0;i<permutacia.length();i++){
- pouzite.add(i+1);
- }
- for(int i=0; i<permutacia.length();i++){
- pomocnePoleTi[i]=pouzite.indexOf(ocislovanaPermutacia[i])+1;
- pouzite.remove(pouzite.indexOf(ocislovanaPermutacia[i]));
- //System.out.println(pomocnePoleTi[i]);
- }
- int sum = permutacia.length()-1;
- int l=0;
- int vysledneK=0;
- while(sum>=0){
- vysledneK += (pomocnePoleTi[l]-1)*factorial(sum);
- sum--;
- l++;
- }
- vysledneK+=1;
- //System.out.println(vysledneK);
- return vysledneK;
- }
- private static String vratPermutaciu(int k){
- List<Integer> pomocnePoleTi = new ArrayList<Integer>();
- k--;
- int velkostPermutacie = vyslednaPermutacia.length()-1;
- int hlp1 = velkostPermutacie;
- int hlp2 = 1;
- int hlp3 = 1;
- while(hlp1>=0){
- pouzite.add(hlp2);
- hlp2++;
- hlp1--;
- }
- int velkostPola = pouzite.size();
- for (int i = velkostPermutacie; i > 0; i--) {
- hlp3=1;
- if ((k>=factorial(i)) && (k>0) ) {
- while((k - hlp3*factorial(i)>=0 )){
- hlp3++;
- }
- k -= (hlp3-1)*factorial(i);
- pomocnePoleTi.add(hlp3);
- }
- else {
- pomocnePoleTi.add(1);
- }
- }
- int[] vyslednePole = new int [velkostPola];
- for (int i = 0; i < velkostPola-1; i++) {
- vyslednePole[i] = pouzite.remove(pomocnePoleTi.get(i)-1);
- }
- vyslednePole[velkostPola-1] = pouzite.remove(0) ;
- String vyslednyRetazec = "";
- for (int i = 0; i < velkostPermutacie+1; i++) {
- vyslednyRetazec += vyslednaPermutacia.charAt(vyslednePole[i] -1);
- }
- return vyslednyRetazec;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement