WinFuture-Forum.de: Waage Mit 4 Gewichten - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Waage Mit 4 Gewichten Denkproblem


#1 Mitglied ist offline   S H A L A F I 

  • Gruppe: aktive Mitglieder
  • Beiträge: 478
  • Beigetreten: 25. November 05
  • Reputation: 0

geschrieben 04. November 2008 - 16:01

Hi,

ich hab ein Problem mit einer Aufgabe.
Undzwar geht es dabei um eine Waage die mit 4 Gewichten (1, 3, 9 und 27 Kg) alle ganzzahligen Gewichte zwischen 1 und 40 Kg darstellen kann.
Das Pinzip hab ich schon verstanden, das ganze will ich aber nun in einem Algorithmus zusammenfassen und in Java implementieren.

Ich hab aber überhaupt keine Idee und bin nichtmal auf einen Ansatz gekommen.
Kann mir jemand helfen?

MfG
shalafi

Dieser Beitrag wurde von S H A L A F I bearbeitet: 04. November 2008 - 16:04

Eingefügtes BildEingefügtes Bild
Eingefügtes Bild Eingefügtes Bild
"And if I had a minute for every hour I wasted, I'd be rich in time, I'd be doing fine"
"The Internet has crashed"
0

Anzeige



#2 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.399
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 04. November 2008 - 17:28

Hm... mache ich grad ein Denkfehler, oder hast du eine Zahl vergessen?:
40 = 27 + 3 + 9 + 1
39 = 27 + 3 + 9
38 = ?
37 = 27 + 9 + 1
36 = 27 + 9
35 = ?
34 = ?
usw ... :rolleyes:

An Sonstem denk ich bei Zahlenfolgen imemr zuerst an ein Array...
Eine genauere Beschreibung wäre auch hilfreich, was die Vorgaben bzw Einschränkungen sind

Dieser Beitrag wurde von renegade2k bearbeitet: 04. November 2008 - 17:34

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#3 Mitglied ist offline   S H A L A F I 

  • Gruppe: aktive Mitglieder
  • Beiträge: 478
  • Beigetreten: 25. November 05
  • Reputation: 0

geschrieben 04. November 2008 - 17:40

Hab keine Zahl vergessen aber ne Bedingung. Die Gewichte können auf beiden Seiten eingesetzt werden. D.h. 38 zb wie 39 und zur 38 noch die 1.

Der genaue Aufgabentext ist

Zitat

Um ein beliebiges ganzzahliges Gewicht zwischen 1 und 40 Kilogramm wiegen zu können, benö
tigt man nur die folgenden vier Gewichte: 1, 3, 9 und 27 kg. Beachten Sie bitte, dass bei dieser
zu wiegen, Gewichte auf beiden Waagschalen zugelassen sind.
Beispiele: Das Gewicht 4 kg lässt sich mit den Gegengewichten 3 und 1 kg aufwiegen. Das Ge-
wicht 5 kg kann man wiegen, indem die Seite des zu wiegenden Gewichtes mit 3 + 1 kg zusätzl
beschwert wird und auf der anderen Waagschale das Gewicht mit 9 kg au#iegt.
Schreiben Sie bitte ein Programm in Java, dass zu einem Gewicht, das vom Nutzer einzu-
geben ist, die korrekte Kombination der o.g. vier Gegengewichte angibt. Soll ein Gewicht auf de
Seite des zu wiegenden Gewichtes aufgelegt werden, kennzeichnen Sie dies bitte durch ein neg
tives Vorzeichen.
Beispiel für die Ausgabe Ihres Programms: Bei der Eingabe von 5 kg zeigt das Programm
folgende Lösung an: 9 - 3 - 1.


Danke fü die Hilfe

MfG
shalafi
Eingefügtes BildEingefügtes Bild
Eingefügtes Bild Eingefügtes Bild
"And if I had a minute for every hour I wasted, I'd be rich in time, I'd be doing fine"
"The Internet has crashed"
0

#4 _fschuldt_

  • Gruppe: Gäste

geschrieben 04. November 2008 - 18:02

Der Trick bei der Aufgabe ist, dass man die Gewichte auf beide Seiten stellen kann. Wenn man z.B. die 1 auf die linke Seite hängt, wird es -1. Wenn man sie hingegen auf die rechte Seite hängt, ist es +1. Dadurch kann man mit den 4 Gewichten alle Gewichte von 1 bis 40 erreichen. Ich habe mal ein par als Beispiele aufgeschrieben:


1 = 1
2 = 3 -1
3 = 3
4 = 3 + 1
5 = 9 - 3 - 1
6 = 9 - 3
7 = 9 - 3 + 1
8 = 9 - 1
9 = 9
10 = 9 + 1
11 = 9 + 3 -1
12 = 9 + 3
13 = 9 + 3 + 1
14 = 27 - 9 - 3 - 1
15 = 27 - 9 - 3
16 = 27 - 9 - 3 + 1
17 = 27 - 9 - 1
18 = 27 - 9
19 = 27 - 9 + 1
20 = 27 + 3 - 9 - 1
21 = 27 + 3 - 9
22 = 27 + 3 + 1 - 9
23 = 27 - 3 - 1
24 = 27 - 3
25 = 27 + 1 - 3
26 = 27 - 1
27 = 27
28 = 27 + 1
29 = 27 + 3 -1
30 = 27 + 3
31 = 27 + 3 + 1
32 = 27 + 9 - 3 - 1
33 = 27 + 9 - 3
34 = 27 + 9 + 1 - 3
35 = 27 + 9 - 1
36 = 27 + 9
37 = 27 + 9 + 1
38 = 27 + 9 + 3 - 1
39 = 27 + 9 + 3
40 = 27 + 9 + 3 + 1



Also alle positiven Gewichte kommen auf die rechte Seite und alle negativen Gewichte kommen auf die linke Seite.


Das einzige Schema was mir dabei auffählt, ist, dass das die 1 erst ein - Zeichen hat, danach ist die 1 gar nicht da. Danach wird ist die +.
5 = 9 - 3 - 1
6 = 9 - 3
7 = 9 - 3 + 1
Dieses Verhalten der 1 wiederholt sich alle 3 Zahlen.
Das heißt,
1 + 3n hat immer +1
2 + 3n hat immer -1
3 + 3n hat nie eine 1

Die dreien verhalten sich ähnlich.
1mal nicht vorhande.
3mal +,
3mal -.
3mal nicht vorhanden.
die 3mal +. - und nicht vorhanden, wiederholen sich periodisch nach 9 Zahlen.

Die neunen verhalten sich ja so, dass sie
4mal nicht vorhanden sind,
9mal + sind,
9mal nicht vorhanden sind,
9mal - sind.
Die 9mal +.- und nicht vorhanden wiederholt sich periodisch nach 27 Zahlen.

Dieser Beitrag wurde von fschuldt bearbeitet: 04. November 2008 - 18:54

0

#5 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.399
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 04. November 2008 - 18:50

Zitat

Beachten Sie bitte, dass bei dieser
zu wiegen, Gewichte auf beiden Waagschalen zugelassen sind.

Das habe ich nicht bedacht, dann ist die Aufgabe klar.

Ich werde mal was ausprobieren mit Array und dann einfach nur mit Variablen und Schleifen.
Als Java-Anfänger ist das schon eine kleine Herausforderung :rolleyes:

Edit: Wobei ich gerade sehe, dass wenn man erst einmal das Muster erkannt hat, das ganze Problem sich relativ leicht realisieren lässt ^^

Dieser Beitrag wurde von renegade2k bearbeitet: 04. November 2008 - 19:08

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#6 Mitglied ist offline   S H A L A F I 

  • Gruppe: aktive Mitglieder
  • Beiträge: 478
  • Beigetreten: 25. November 05
  • Reputation: 0

geschrieben 04. November 2008 - 19:46

Naja wenn du das sagst^^

Ich habe das Muster demnach nicht erkannt.

Habe gerade versucht das ganze in einem zweidimensionalen Array zu realisiern und dann die entsprechende Zahl zu suchen aber das geht auch nicht.

Bitte verrate mir dein Muster bitte bitte bitte...:rolleyes:

MfG
shalafi
Eingefügtes BildEingefügtes Bild
Eingefügtes Bild Eingefügtes Bild
"And if I had a minute for every hour I wasted, I'd be rich in time, I'd be doing fine"
"The Internet has crashed"
0

#7 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.399
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 04. November 2008 - 20:08

import java.util.Scanner;

public class haupt {

	public static void main(String[] args) {
		int a = 1, b = 3, c = 9, d = 27; // Die verfügbaren gewichte
		
		// Scanner für die Benutzereingabe des zu errechnenden Gewichts
		Scanner eing = new Scanner(System.in);
		System.out.println("Bitte geben sie das gewünschte Gewicht ein...");
		int gewicht = eing.nextInt();

		// Alghoritmus
		int i;
		i = gewicht % 3;
		if (i == 0) {
			System.out.print("");
		} else if (i == 1) {
			System.out.print("+1");
		} else if (i == 2) {
			System.out.print("-1");
		}
		if (gewicht > 1){
			drei (gewicht);
		}
	

	}
	public static void drei(int gewicht ){
		int i = ((gewicht - 2)/3)%3;
		if (i == 0) {
			System.out.print("+3");
		} else if (i == 1) {
			System.out.print("-3");
		} else if (i == 2) {
			System.out.print("");
		}
		if (gewicht > 4){
			neun (gewicht);
		}

	}
	public static void neun(int gewicht ){
		int i = ((gewicht - 5)/9)%3;
		if (i == 0) {
			System.out.print("+9");
		} else if (i == 1) {
			System.out.print("-9");
		} else if (i == 2) {
			System.out.print("");
		}
		if (gewicht > 13){
			siebzwa(gewicht);
		}

	}
	public static void siebzwa(int gewicht ){
		int i = ((gewicht - 14)/27)%3;
		if (i == 0) {
			System.out.print("+27");
		} else if (i == 1) {
			System.out.print("-27");
		} else if (i == 2) {
			System.out.print("");
		}
		

	}
}


Das ist schonmal meine Vorab-Lösung.
Das ganze werd' ich noch morgen nochmal richtig schön rekursiv verpacken, sodass man quasi nur noch eine "if - else if - else if"-Abfrage hat :D

Dieser Beitrag wurde von renegade2k bearbeitet: 04. November 2008 - 22:01

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#8 Mitglied ist offline   S H A L A F I 

  • Gruppe: aktive Mitglieder
  • Beiträge: 478
  • Beigetreten: 25. November 05
  • Reputation: 0

geschrieben 04. November 2008 - 22:18

Danke für eure Hilfe speziell deine Renegade2k.

Da wäre ich nicht drauf gekommen. Hat mir sehr geholfen.

MfG
shalafi
Eingefügtes BildEingefügtes Bild
Eingefügtes Bild Eingefügtes Bild
"And if I had a minute for every hour I wasted, I'd be rich in time, I'd be doing fine"
"The Internet has crashed"
0

#9 Mitglied ist offline   renegade2k 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.399
  • Beigetreten: 30. Juli 07
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Nähe D'dorf

geschrieben 04. November 2008 - 23:12

Kein Problem ;)
War doch etwas kniffliger, als auf den ersten Blick gedacht, aber ich bin grade von mir selbst begeistert, weil ich's geschafft habe ;)

Edit: Da ich gerade schon so motiviert war...
import java.util.Scanner;

public class haupt {

	public static void main(String[] args) {
		// Scanner für die Benutzereingabe des zu errechnenden Gewichts
		Scanner eing = new Scanner(System.in);
		System.out.println("Bitte geben sie das gewünschte Gewicht ein...");
		int gewicht = eing.nextInt();

		int a = 1; // stellt das momentane "gewicht" dar, das auf die wage
		// gelegt wird, dessen wert eine potenz von 3 ist
		int b = 0; // zählt den wert, den man tatsächlich "im moment" auf der
		// waage hat, wird die ganze zeit mitgeschleppt
		rechne(gewicht, a, b);
	}
	public static void rechne(int gewicht, int a, int b) {
		int i;
		i = ((gewicht - ((a + 1) / 2)) / a) % 3;
		if (i == 0) {
			System.out.print("+" + a);
			b += a;// der ausgabe entsprechende zählung
		} else if (i == 1) {
			System.out.print("-" + a);
			b -= a;
		} else if (i == 2) {
			System.out.print("");
		}
		if (gewicht > b) {
			rechne(gewicht, a * 3, b);
		}
	}
}


Das ist meine ultimative Lösung :D
Ich bin mir sicher, Spezis finden da noch was zu optimieren, aber für mein Geschmack ist das perfekt :D
Funktioniert wie angekündigt für alle Gewichte, die innerhalb der Integer-Grenzen berechenbar sind ;)

Dieser Beitrag wurde von renegade2k bearbeitet: 05. November 2008 - 01:01

- Vista x64 Multilanguage Update Pack : ist oben ;) -
0

#10 _Fenix_

  • Gruppe: Gäste

geschrieben 28. November 2008 - 15:37

Es müsste auch mit einer leicht abgewandelten Version von http://de.wikipedia....Rucksackproblem gehen.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0