Skip to content

Instantly share code, notes, and snippets.

@kangalio
Created August 26, 2016 18:03
Show Gist options
  • Save kangalio/62205c4d68d01cb05001d829de1a37f8 to your computer and use it in GitHub Desktop.
Save kangalio/62205c4d68d01cb05001d829de1a37f8 to your computer and use it in GitHub Desktop.
Small helper for Josephus Problem
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static int[] test(int anzahl,boolean[] pattern) {
Deque<Integer> karten=new ArrayDeque<Integer>();
int[] ergebnis=new int[anzahl];
for(int i=0;i<anzahl;i++) {
karten.addLast(i+1);
}
int i=0;
int kartenAusgespielt=0;
while(!karten.isEmpty()) {
if(pattern[i]) {
ergebnis[kartenAusgespielt++]=karten.pop();
} else {
karten.addLast(karten.pop());
}
if(++i==pattern.length)i=0;
}
return ergebnis;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("Pruefe bis Anzahl (max. 2.147.483.647): ");
int anzahl=scanner.nextInt(); //DESKTOP COMPILER
//int anzahl=Integer.parseInt(args[0]); //ONLINE COMPILER
boolean[] pattern={true,false}; //HERE THE PATTERN IS DEFINED
ArrayList<Integer> ergebnis=new ArrayList<Integer>();
System.out.println("Die letzen Karten sind:\n");
int dingdong=anzahl/100; //PROZENT
System.out.println("===================================================================================================="); //PROZENT
for(int i=1;i<=anzahl;i++) {
if(i%dingdong==0)System.out.print("="); //PROZENT
ergebnis.add(test(i,pattern)[i-1]);
}
System.out.println(); //PROZENT
int lastEnd=0;
for(int i=1;i<anzahl;i++) {
//if(ergebnis.get(i)<ergebnis.get(i-1))System.out.println(ergebnis.get(i)); //ANFANGSZAHL EINER ZAHLENSERIE
//if(ergebnis.get(i)<=ergebnis.get(i-1)){System.out.println(ergebnis.get(i-1)-lastEnd);lastEnd=ergebnis.get(i-1);} //DIFFERENZEN DER ENDEN DER ZAHLENSERIEN
System.out.println((i+1)+": "+ergebnis.get(i)); //NORMALES AUSGEBEN
}
/* //START === RELATIVE HÄUFIGKEIT EINZEILNER ANFANGZAHLEN DER ZAHLENSERIEN
int[] bla=new int[pattern.length-1];
int blub=0;
for(int i=1;i<anzahl;i++) {
if(ergebnis.get(i)<ergebnis.get(i-1)){bla[ergebnis.get(i)-2]++;blub++;}
}
for(int i=0;i<bla.length;i++) {
System.out.println("Anteil von "+(i+2)+": "+(((float)bla[i]/blub)*100)+"%");
}
*/ //ENDE
scanner.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment