Zahlenrätsel (fünfstellige Zahl) (Schleifen)
Gesucht wird die fünfstellige Zahl ABCDE, die mit 4 multipliziert sich selbst rückwärts ergibt:
4 x ABCDE = EDCBA
Schreiben einen Algorithmus, der die einzig mögliche Lösung ausgibt.
0 Kommentare
7 Lösung(en)
Number.prototype.reverse = function() {
return parseInt(this.toString().split('').reverse().join(''));
}
Number.prototype.hasDuplicates = function() {
let arr = this.toString().padStart(5, '0').split('');
return new Set(arr).size != arr.length;
}
for (let i = 01234; i * 4 <= 98765; i++) {
if (!i.hasDuplicates()) {
let i4 = i * 4;
if (i4.toString().length == 5 && i4 == i.reverse())
console.log(
`4 × ${i.toString().padStart(5, '0')} = ${i4}`
);
}
}
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
import itertools
for x in itertools.product(range(10), repeat=5):
num = sum((n * 10**(len(x)-i) for i, n in enumerate(x, start=1)))
rev = sum((n * 10**i for i, n in enumerate(x, start=0)))
if 4*num == rev and (len(str(num)), len(str(rev))) == (5, 5):
print(f"4 x {num} = {rev}")
Lösung von: Name nicht veröffentlicht
print([i for i in range(10000,100000) if str(4*i)==str(i)[::-1]][0])
Lösung von: rob ert (tub)
// C++ 17
#include <iostream>
int reverse_number(int n) {
if (n % 10 == n) return n;
auto z{ 0 };
while (n) {
const auto r{ n % 10 };
n /= 10;
z = z * 10 + r;
}
return z;
}
int main() {
for (auto i{ 12'345 }; i < 98'765; ++i) {
const auto r{ reverse_number(i) };
if (4 * i == r) {
std::cout << "4 x " << i << " = " << r << "\n";
break;
}
}
}
Lösung von: Jens Kelm (@JKooP)
// NET 6.x | C# 10.x | VS-2022
for (var i = 12_345; i < 98_765; i++) {
_ = int.TryParse(string.Join("", i.ToString().Reverse()), out var r);
if (4 * i == r) Console.WriteLine($"4 x {i} = {r}");
}
Lösung von: Jens Kelm (@JKooP)
' VBA
Sub Main()
Dim i As Long, r As Long
For i = 12345 To 98765
r = CLng(StrReverse(CStr(i)))
If 4 * i = r Then
Debug.Print "4 x " & i & " = " & r
Exit For
End If
Next
End Sub
Lösung von: Jens Kelm (@JKooP)
#include <stdio.h>
int reverse_number(int n) {
if (n % 10 == n) return n;
int z = 0;
do z = z * 10 + n % 10;
while (n /= 10);
return z;
}
int main() {
for (int i = 98764; i > 12345; i-=2) {
if(i % 4 == 0) {
int r = reverse_number(i);
if (i / 4 == r) {
printf("4 x %i = %i\n", r, i);
break;
}
}
}
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
4 x 21978 = 87912
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung: