Επειδή ο κώδικας είναι σχετικά απλός σας τον παραθέτω για κάθε χρήση!
[Το ξέρω οτι έχω εκνευριστικά πολλά σχόλια, απλά για να το κατάλαβει κι όποιος δε ξέρει από Java.. ή και γενικότερα από προγραμματισμό!]
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SearchNumbers {
public static void main(String[] args) {
int i = 0;
//δίνω αρχική τιμή 0 για τον μαγικό αριθμο, αλλά λογο του ότι αυξάνει πριν να ελεγχθεί, θα ξεκινήσει τον έλεγχο απο το αμέσος επόμενο
boolean foundMagicNumber = false;
//Αρχικά ο μαγικός αριθμός δεν έχει βρεθεί
while (!foundMagicNumber) {
//Επαναλαμβάνει μέχρι να βρεθεί ο μαγικός αριθμός
i++;//αυξανω τον μετρητή ώστε κάθε φορά να ελέγχω τον επόμενο ακαίρεο
System.out.println("Check:"+i);
//Τυπώνω το ποιος αριθμός ελέγχεται αυτή τη στιγμή ώστε να ξέρει ο χρήστης που έχει φτάσει ο έλεγχος
MagicNumber n = new MagicNumber(i);
for (int k = 1; k < 6; k++){
//Ψάχνω όλα τα ακαίρεα πολλαπλάσια απο 1 εως και 5
if (!n.isValidMultiplication(k)){
foundMagicNumber=false;
//αν έστω κι ένα πολλάπλάσιο δεν ειναι κατάλληλο δε θα ελεγχθεί κανένα άλλο
break;
//δηλαδή η διαδικασία ελέγχου του συγκεκριμένου αριθμού θα σταματήσει
}else
foundMagicNumber = true;
//ενώ αν ειναι κατάλληλος θα ψάξει να βρει εάν κι ολοι οι αλλοι ειναι, οποτε θα σημαίνει οτι βρέθηκε ο "μαγικός αριθμός"
}
}
System.out.println("Magic number:" + i);
//Οπότε τυπώνει τον μαγικό αριθμο!
}
private static class MagicNumber {
private String digits = null;
private Integer number = -1;
public MagicNumber(Integer number) {
this.number = number;
this.digits = getDigits(number);
//Κρατάμε τα ψηφία του αριθμού για να τα συγκρίνουμε με αυτά των πολλαπλάσιων
}
private boolean isValidMultiplication(int factor) {
Integer result = number * factor;
//Υπολογίζουμε την τιμή του πολλαπλάσιου
return this.digits.equals(getDigits(result));
//Ελέγχουμε αν τα ψηφία του πολλαπλάσιου είναι τα ίδια με αυτα του αριθμού
}
private static String getDigits(Integer number) {
String numberAsString = Integer.toString(number);
//Πρέπει να αντιμετοπίσουμε τον αριθμός ως αλφαριθμιτικό-κείμενο
List
//Του οποίου τους χαρακτήρες-ψηφία θα μαζέψουμε σε μια λίστα
for (int i = 0; i < numberAsString.length(); i++)
digits.add(numberAsString.charAt(i));
//Αντλούμε ένα ένα τα ψηφία του αριθμού
Collections.sort(digits);
//Τους τακτοποιούμε για να ειναι πάντα με την ιδια σειρά
StringBuffer hashString = new StringBuffer();
//Τα ψηφία με την σωστή σειρά θα τα τοποθετήσουμε σε ένα αλλο αλφαριθμιτικό-κείμενο
for (Character digit : digits)
hashString.append(digit.charValue());
return hashString.toString();
}
}
}
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου