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..
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.
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...
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.
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..
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
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
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?
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: