palindrome probleme

  • Themenstarter Themenstarter kim988de
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

kim988de

Gast
hallo das ist meine Aufgabe
Write a program to print all the 5-digit palindrome numbers. A number with the
same digits from either end is called a palindrome. Examples: 16261, 93439,
20102.

zu meinen Problem

Code:
class Main {
    public static void main(String[] args) {
       int n; 
        if (int n=10000;n<99999;); { 
            System.out.println(+n);
        }


das problem ist wie kann ich die 3. expression aufschreiben so dass der Computer versteht dass er nur palindrome anzeigen soll...
Koennt ihr mir paar tips geben...bitte keine Komplettloesungen...sondern nur hinweise...fuer anfaenger..danke..
 
du musst alle Kombinationen von drei Zahlen finden, das ist die Primäraufgabe,
und dann noch zwei der ersten Zahlen nochmal aufschreiben

hier paar Ideen:
http://www.java-forum.org/de/viewtopic.php?t=74985

Rekursion wäre für dieses Problem besonders elegant, kennst du aber vielleicht nicht,
einfache for-Schleifen können es genauso
 
Mit dem Ansatz den du angedeutet hast, ist das erste Problem, dass du die einzelnen Ziffern einer Zahl untersuchen musst. Das kannst du z.B. machen indem du die Zahl in einen String umwandelst:
Beispiel:
Code:
int zahl = 1000;
String string_zahl = Integer.toString(zahl);

Um die Ziffern zu untersuchen kannst du den charAt Befehl benutzen.
Code:
String wort = "Hallo";
char c = wort.charAt(4);
System.out.println(c); // Ausgabe "o"


Nun musst du nur noch die Ziffern vergleichen...
 
Die von dir gesuchten Zahlen müssen die folgenden Voraussetzungen erfüllen:

a) Die 3. Ziffer ist beliebig
b) Die 2. und die 4. Ziffer sind beliebig, müssen aber gleich sein
c) Die 1. und die 5. Ziffer dürfen nicht 0 sein und müssen gleich sein

Es sollte nicht schwer sein diesen "Algorithmus" zu codieren ... beginnend bei 10001 und endend bei 99999...
 
Schwups hat recht, es sind eigentlich nur 2 Bedingungen:
1) 2. und 4. Ziffer müssen gleich sein
2) 1. und 5. Ziffer müssen gleich sein

und integer zu String umwandeln kann ich ja schon aus meinen vorherigen Aufgaben.
 
SlaterB hat gesagt.:
Rekursion wäre für dieses Problem besonders elegant
Finde ich auch 😉
deswegen hier meine etwas lahme, aber fachidiotisch total korrekte Lösung 🙂 :
Code:
import java.util.*;

public class Palindrome{
	
	public static Set<String> getPalindromes(Set<String> alphabet,int length){
		Set<String> result;
		if(length==0){
			result=new HashSet<String>();
			result.add(""); //die (nichtleere!) Menge mit der leeren Zeichenkette
		}else if(length==1){
			result=alphabet; //das alphabet zurueckgeben
		}else{
			result=new HashSet<String>();
			Set<String> coreSet=getPalindromes(alphabet,length-2);
			for(String core: coreSet){
				for(String element:alphabet){
					result.add(element+core+element);
				}
			}
		}
		return result;
	}
	
	public static void main(String[] args){
		
		//alphabet konstruieren
		Set<String> alphabet=new HashSet<String>();
		for(int i=0; i<10; i++){
			alphabet.add(String.valueOf(i));
		}
		
		//alle palindrome der länge 5 berechnen
		Set<String> palindromes=getPalindromes(alphabet,5);
		
		//ueberpruefen, ob die palindrome den konventionen
		//fuer die notation der natuerlichen zahlen im dekadischen
		//System entsprechen. ggf. aus der Menge entfernen
		for(Iterator<String> i=palindromes.iterator(); i.hasNext();){
			String s=i.next();
			if(!s.matches("[1-9]+\\d+")) i.remove();
		}
		
		//ausgeben
		System.out.println(palindromes);
		
		//da es sonst zu unuebersichtlich wird: maechtigkeit der erzeugten Menge kontrollieren
		System.out.println("size="+palindromes.size());
	}
}

edit: obwohl, hm, soo allgemein ist die lösung auch wieder nicht, ich hätte nämlich statt überall (etwa für's alphabet) Strings zu nehmen, beliebige Objekte zulasen sollen, steht ja nirgendwo festgeschrieben, was ein "Alphabet" sein soll, hauptsache es ist eine endliche Menge.
 
Wenn der Fragende diese Lösung abgibt, wird der Prof ihm vorschlagen mit ihm die Plätze zu tauschen.
 
Hehe, interpretiere das mal als kompliment^^
Naja, das ist eigentlich die naheliegenste Lösung, der Fragende soll zum spaß mal ein paar monate Prolog programmieren, da entdeckt man schnell die Freude an solchen Sachen 🙂
 
Naja, vielleicht etwas kompliziert für einen Java Anfänger :wink:
Rekursive Funktionen, Sets und reguläre Ausdrücke. Und das wahrscheinlich so etwa in der Aufgabe 2b des Java Grundkurses.
Das schockt ^^

Aber sicher hattest du Spaß dabei es zu programmieren 😉
 
Hallo...
habe gerade gelesen dass sich eine kim988de euch geschrieben hat...aber das war ich leider nicht....jmd hat sich wohl als mich mit der ID kim988de angegeben...anyways danke fuer die tipps und werde das mal erstmal ein wenig verdauern und zurueckkommen...danke..
 
hmm, das lese ich jetzt zum dritten Mal in einer Woche, vorher sogut wie nie,
da muss ja jemand mit Sytem vorgehen 😉
 
wiederholungstäter^^
Ist jetzt der zweite hier von kim988de gepostete Beitrag gemeint? Wieso schreibt jemand sowas überhaupt... Das war weder witzig noch irgendwie trollig, sah einfach nach irgendeinen verschwommenen aussage aus ???:L
 
Hallo..
das ist wirklich immernoch super schwer.

Code:
class Main { 
    public static void main(String[] args) { 
       int n; 
        for (int n=10000;n<99999;*// KANN ICH HIER EINE IF ANWEISUNG REINGEBEN?//* ); { 
            System.out.println(+n); 
        }

Ich muss dem computer ja klar machen dass nur 5 stellige Palindrome angezeigt werden soll. Ich habe wirklich keine Ahnung wie soll dass denn gehen?
Wir haben nur die for schleifen if schleifen und while do schleifen gelernt..bitte um hinweise...thanks
 
in die Schleifenbedingung kommt bei dieser Idee nix außer dem normalen n++;


in die Schleife selber, in Zeile 6, kannst du dann n mit if oder allerlei anderen Code beharken,
ohne Programmierkenntnisse und nur Fragezeichen gehts natürlich nicht
 
Mann, warum so ein Gewese mit Strings und so?

Code:
    for(int a = 1; a < 10; a++) {
      for (int b = 0; b < 10; b++) {
        for (int c = 0; c < 10; c++) {
          System.out.println(10000*a + 1000*b + 100* c + 10*b + a);
        }
      }
    }
 
dann hilft mir..ich habe wirklich null ahnung habe mir jetzt ein einsteiger java buch auf deutsch geholt damit ich im Unterricht etwas mitkomme aber ich bin jetzt voll behind...
Ich habe k. Ahnung wie ich das mit den Palindrome programmieren soll als 5 einzelne Integer waere es mir noch klar aber ich soll es als eine 5stellige Zahl benutzen und dann irgendwie umwandeln mit string oder so..bin total ueberfragt.....
waere euch programmierprofis super dankbar...
 
Hallo? Teilnehmer? Was ist an meinem vorigen Code unklar?

Du hast bei einem 5-stellingen Palindrom immer das Schema abcba. Also gehst du in Schleifen alle möglichen Werte der Ziffern a, b und c durch. Dann zusammenaddieren - wie das Zehnersystem funktioniert, sollte eigentlich klar sein oder?
 
KANN ICH HIER EINE IF ANWEISUNG REINGEBEN?
Nun ja, manchmal wundere ich mich selbst, was man alles in eine Zeile reinpacken kann, wie etwa diesen quatsch hier:
Code:
public class TEST {
public static void main(String[] args){
	for(int a=10000; a<100000; System.out.print((a%10==(a/10000)%10 && (a/10)%10==(a/1000)%10)?(a+++"\n"):((a+++"").substring(0,0))));
}
}
Ist performancekill und übler code etc, kann doch kein mensch lesen^^
Aber lustig ist es 😛


edit:
@Landei: wozu die multiplikationen? wenn man's schon auf die billige tour will, dann kann man das doch auch gleich noch billiger auf zeichenebene machen:
Code:
for(char i='1'; i<='9'; i++){
		for(char j='0'; j<='9'; j++){
			for(char k='1'; k<='9'; k++){
				System.out.println(i+""+j+""+k+""+j+""+i);
			}
		}	
	}
 
Habe halt den rein arithmetischen Weg gewählt, um unseren Eleven nicht zu verschrecken.

Deiner ist auch hübsch 🙂
Aber wenn schon, dann:
Code:
   for(char i='1'; i<='9'; i++){ 
      for(char j='0'; j<='9'; j++){ 
         for(char k='0'; k<='9'; k++){ 
            System.out.printf("%c%c%c%2$c%1$c%n", i, j, k); 
         } 
      }    
   }
 
landei...sorry dein code habe ich gar nicht verstanden...
andrey
das sieht aus wonach ich gesucht habe...werde das mal abchecken..d.anke...an alle
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben