Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Zahlenrätsel (neunstellige Zahl) (Schleifen)

Gesucht ist eine neunstellige Zahl (fiktiv: 987654321), die folgenden Kriterien entspricht:

  • jede Ziffer von 1 bis 9 darf nur einmal vorkommen,
  • die Ziffer Null (0) darf nicht vorkommen,
  • die erste Stelle - also die Zahl 9 - ist ohne Rest durch 1 teilbar,
  • die ersten 2 Stellen - also die Zahl 98 - ist ohne Rest durch 2 teilbar,
  • die ersten 3 Stellen - also die Zahl 987 - ist ohne Rest durch 3 teilbar,
  • usw…
  • alle neun Stellen - also die Zahl 987654321 - ist ohne Rest durch 9 teilbar.

 

Schreibe einen Algorithmus, der die einzig mögliche Zahl ausgibt. Wenn möglich, sollte dieser so performant sein, dass die Lösung innerhalb einer Sekunde erscheint.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

5 Lösung(en)

// aus der bibliothek meiner
// project-euler-helferlein:
function permute(arr) {
  var length = arr.length,
      result = [arr.slice()],
      c = new Array(length).fill(0),
      i = 1, k, p;
  while (i < length) {
    if (c[i] < i) {
      k = i % 2 && c[i];
      p = arr[i];
      arr[i] = arr[k];
      arr[k] = p;
      ++c[i];
      i = 1;
      result.push(arr.slice());
    } else {
      c[i] = 0;
      ++i;
    }
  }
  return result;
}

function check(item) {
  // durch die permutationen entfallen die prüfungen auf nullen
  // und doppelte stellen
  for (let i = 9; i > 1; i--)
    if (parseInt(item.join('').slice(0, i)) % i != 0) return false;
  return true;
}

// main
console.time();

let p = permute('123456789'.split('')),
    x = 0;

while (!check(p[x])) x++;

console.timeEnd();
console.log(p[x].join(''));

                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// C++ 17
#include <iostream>
#include <algorithm>
#include <string>

int main() {
    std::string s{ "123456789" };
    while (next_permutation(s.begin(), s.end())) {
        auto is_nr{ true };
        for (auto i{ s.length() }; i > 0; --i) {
            if (std::stoll(s.substr(0, i)) % i != 0) {
                is_nr = false;
                break;
            }
        }
        if (is_nr) {
            std::cout << s << "\n";
            break;
        }
    }
}
                

Lösung von: Jens Kelm (@JKooP)

// NET 6.x | C# 10.x | VS-2022

var nums = "123456789";
new Permutation().Permute(nums.ToCharArray());

public class Permutation {
    public void Permute(char[] lst) => Permute(lst, 0, lst.Length - 1);
    private void Permute(char[] arr, int k, int m) {
        if (k == m) {
            bool is_nr = true;
            for (int i = arr.Length; i > 0; --i) {
                if (int.Parse(arr.AsSpan()[..i]) % i != 0) {
                    is_nr = false;
                    break;
                }
            }
            if (is_nr) {
                Console.WriteLine(string.Join("", arr));
                return;
            }
        }
        else
            for (int i = k; i <= m; i++) {
                (arr[k], arr[i]) = (arr[i], arr[k]);
                Permute(arr, k + 1, m);
                (arr[k], arr[i]) = (arr[i], arr[k]);
            }
    }
}
                

Lösung von: Jens Kelm (@JKooP)

def solve_riddle(remaining_nums=set(range(1, 10)), curr_num=0, curr_mod=1):
    if not remaining_nums:
        return curr_num
    for num in remaining_nums:
        next_num = 10 * curr_num + num
        if next_num % curr_mod != 0:
            continue
        next_solution = solve_riddle(remaining_nums - {num}, next_num, curr_mod+1)
        if next_solution is not None:
            return next_solution

print(solve_riddle())
                

Lösung von: Name nicht veröffentlicht

from itertools import permutations;from re import findall
print([i for i in [int(''.join(findall('[1-9]',str(b)))) for b in list(permutations('123456789'))] if len([b for b in range(9) if int(str(i)[0:b+1])%(b+1)==0])==9][0])

                

Lösung von: rob ert (tub)

Verifikation/Checksumme:

381654729

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit:
Schwierigkeit: Mittel
Webcode: 6kee-7nrf
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen