WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 21.11.2004, 12:36   #1
midas
Master
 
Registriert seit: 21.12.2002
Alter: 36
Beiträge: 606


midas eine Nachricht über ICQ schicken
Standard Auszählprogramm in Java

Hi!

Ich soll ein Programm nach diesen Aufgabenstellungen machen, komme aber nicht weiter:
Zitat:
Bei manchen Kinderspielen werden Abzählreime verwendet, um z.B. einem Kind eine besondere Funktion zuzuteilen. Diese Vorgehensweise soll hier durch ein Programm modelliert werden, in dem ein array int[] kinder der Länge n mit der Besetzung 1..n zyklisch durchlaufen wird in Schritten der Grösse s. Die beiden (positiven) int-Werte n und s sind vom Benutzer zu erfragen, die "Kinder" sind in der Reihenfolge Ihres Ausscheidens auszudrucken.
Ich hab jetzt schon folgendes gemacht und die Arrays belegt, nur komme ich mit dem Auszählen nicht weiter, ich hoffe es kann mir jemand helfen.
Code:
public class Bsp11
{

	public static void main(String[] args)
	{
		int[] kinder;
		int n,s,i,schritte=0; // n = children s = Steps
		boolean run = true;


		// get inputs
		System.out.println("Bitte Anzahl der Kinder eingeben >0: ");
		n = SavitchIn.readLineInt();
		kinder = new int[n];
		System.out.println("Bitte Schritte eingeben >0: ");
		s = SavitchIn.readLineInt();


		for(i=0;i < n; i++)						// kinder[] gets a value from 1..n
			{
				kinder[i] = i+1;
				//System.out.println(kinder[i]);

			}

		System.out.println(); //blank line



		//The real work






	}
}
midas ist offline   Mit Zitat antworten
Alt 21.11.2004, 14:57   #2
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

Probier's mal mit
Code:
int j=0; //j ist die Variable mit der das Array durchlaufen wird
for(int i=0;i<n; i++){ //i dient dazu, daß das Array nur einmal durchlaufen wird
  j+=s; //Kurz für j=j+s;
  if(j>=n){j-=n;} //Damit j nicht über das Array hinausläuft
  System.out.println(kinder[j]);
}
Hab's nicht probiert, sollte aber funktionieren.
Würde trotzdem empfehlen EPROG ordentlich zu machen, du wirst es brauchen...

Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Alt 21.11.2004, 16:32   #3
flinx
Inventar
 
Registriert seit: 08.04.2001
Beiträge: 3.101


Standard

Sowas ala
Code:
z=n-1
for(i=0;i < n; i++) {
   for (j=0; j<s; j++}
   {
      z=(z+1) Modulo n 
      While kinder[z]=0
      {
         z=(z+1) Modulo n
      }      
   }
    Ausgabe(kinder[z])
    kinder[z]=0
}
könnte ev. funktionieren.
k.A. wie die Syntax in Java aussieht.
flinx ist offline   Mit Zitat antworten
Alt 21.11.2004, 19:10   #4
Tarjan
Quantensingularität
 
Registriert seit: 28.09.2000
Alter: 55
Beiträge: 8.336


Tarjan eine Nachricht über ICQ schicken
Standard

so sollte es gehen:

Code:
import java.util.ArrayList;

/**
 * @author Tarjan
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Kinderreim 
{

	public static void main(String[] args) 
	{
		int n = Integer.valueOf(args[0]).intValue();	// Anzahl Kinder
		int s = Integer.valueOf(args[1]).intValue();	// Schrittgröße
		
		// Array befüllen und Kinder bennen
		ArrayList kinder = new ArrayList(n);
		for (int i=0, l=kinder.size(); i<n; i++)
		{
			kinder.add("Kind " + (i+1));	//+1 da Java mit 0 zu zählen beginnt, wir aber mit 1 ;) 
		}
		
		// Auszählreim
		int i=s-1;	// Zählindex beginned beim ersten Kind
		while (kinder.size() > 0)	// solange es noch Kinder gibt
		{
			while (i >= kinder.size()) {i -= kinder.size();} // sollte Ende erreicht sein -> von vorne 
			System.out.println(kinder.get(i));	// Kind ausdrucken
			kinder.remove(i);	// Kind scheidet aus
			i+=s-1;	// um Schrittgöße weiterzählen (minus eines wegen ausgeschiedenen Kind
		}
		
	}
}
gibt für n=9, s=3 folgendes aus:
Kind 3
Kind 6
Kind 9
Kind 4
Kind 8
Kind 5
Kind 2
Kind 7
Kind 1
____________________________________
Was ist klein, grün und dreieckig?
Ein kleines grünes Dreieck!


Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg!
Tarjan ist offline   Mit Zitat antworten
Alt 22.11.2004, 22:30   #5
midas
Master
 
Registriert seit: 21.12.2002
Alter: 36
Beiträge: 606


midas eine Nachricht über ICQ schicken
Standard

Ich habs jetzt so gelöst
Code:
public class Bsp11
{

	public static void main(String[] args)
	{
		int[] kinder;
		int n=1,s,arraylaenge,hilf,j,k=1; // n = children s = Steps


		// get inputs
		System.out.println("Bitte Anzahl der Kinder eingeben >0: ");
		n += SavitchIn.readLineInt();
		kinder = new int[n+1];
		arraylaenge = n;
		System.out.println("Bitte Schritte eingeben >0: ");
		s = SavitchIn.readLineInt();


	for (int i=1; i<=n; i++)
			{
				kinder[i] = i;
		}

		System.out.println(); //blank line



		//The real work

	for(int i=1;n > 1;i++) { //when all arrays are moved

		//System.out.println(n);
		//System.out.println();
		System.out.println("next run");
		j=1;
		do { //till the run var is as large as the var that is the end of the search area
			System.out.println("Ausgeschieden ist Kind: " + kinder[j]);
			hilf = kinder[j];
			kinder[j] = kinder[arraylaenge-k];
			kinder[arraylaenge - k] = hilf;
			//Checksets
			System.out.println("Durchlauf: " + j);
			System.out.println("n: " + n);
			System.out.println("j: "+ j);
			System.out.println();
			//var increments
			n--;
			k++;
			j+=s;
			} while (j<n);
	}
midas ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:11 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag