Wie löst man "Zero-One" Multiple Coding Solution?

8

Gegeben eine Zahl N, finde die kleinste "Null-Eins" -Nummer S, die ein Vielfaches von N ist. Eine "Null-Eins" -Nummer besteht aus den Ziffern 0 und / oder 1.

z. Wenn N=4 dann S=100 Hier ist 100 das kleinste ganzzahlige Vielfache von 4 , dessen Darstellung nur aus 0 und / oder 1 Ziffern besteht.

Ich habe es auf rohe Weise versucht, aber ich suche nach einer effizienten Lösung.

    
Vallabh Patade 01.02.2015, 22:39
quelle

10 Antworten

17

Sie müssen nach der kleinsten Zahl suchen, um N zu multiplizieren.

Ich würde die Zahl inkrementell erstellen, beginnend mit der niedrigstwertigen Ziffer.

Angenommen, N = 7. Was sind die möglichen niedrigstwertigen Ziffern der Multiplikationszahl? Es wird eine Zahl sein, die, wenn Sie mit 7 multiplizieren, ein Ergebnis mit der niedrigstwertigen Ziffer von 0 oder 1 hat. Wenn Sie die Zahlen von 0-9 versuchen, kann es nur '0' oder 3 'sein.

%Vor%

Dann versuchen Sie die zweitniedrigste Ziffer. Sie werden jetzt versuchen 00, 10, 20, 30, 40, 50, 60, 70, 80, 90 und 03,13,23,43,53,63,73,83,93. Die erfolgreichen Kandidaten werden diejenigen sein, bei denen, multipliziert mit 7, eine Zahl erzeugt wird, in der die zwei niedrigstwertigen Ziffern 0 oder 1 sind. Sie erhalten '43', '30', '00' und '01'.

Wiederholen Sie diesen Vorgang mit der dritten Ziffer, wobei Sie die Nummer finden, die ein Vielfaches mit 3 niedrigstwertigen Ziffern erzeugt, die die Qualitäten erfüllen.

Während des Vorgangs werden Sie eine Nummer finden, in der ALLE Ziffern die Qualitäten erfüllen, und das ist Ihre Antwort. Im Fall von N = 7 haben Sie es an der 3. Stelle gefunden. (7 * 143 == 1001).

    
Andrew Shepherd 01.02.2015 23:10
quelle
4

Hier ist ein alternativer Ansatz mit BFS.

Beginnend mit einem Wurzelknoten mit dem Wert 1 , erstellen Sie einen Entscheidungsbaum, ob eine 0 oder 1 angehängt werden soll. Jeder Knoten repräsentiert somit eine Zahl, die die Ziffern 0s und 1s verwendet. Sie führen dann BFS durch, um die niedrigste Nummer zu finden, die ebenfalls ein Vielfaches der eingegebenen Nummer ist.

Diese Lösung nutzt auch Modulo (der Eingangsnummer), um wirklich große Ergebnisse zu berechnen. Ausführliche Beschreibung in den Kommentaren im Code verfügbar.

Sie können auch auf das gleiche Code-Snippet in ideone zugreifen.

%Vor%     
Tuxdude 27.04.2016 01:05
quelle
2

Wie wäre es damit: Sie versuchen eine Reihe von Zahlen: 1, 10, 100, 1000, 10000, ..... und Sie teilen jede Zahl durch N und Sie zeichnen den Rest auf  Z.B. N = 9, 1/9 = 1 10 = 1 (mod 9), 100 = 1 (mod 9), ....  Der Punkt ist, dass Sie eine bestimmte Zahl aus dieser Serie wählen müssen und sicherstellen, dass sich diese Reste zu einem Vielfachen von N addieren.  Z.B. N = 9, dann addierst du 1, 10, 100, ....

Ich würde vorschlagen, den Algorithmus zu verwenden: Einmal die Summe des Rests der Reihe & gt; N, versuche im Rest nach Resten zu suchen, die zusammen N usw. ergeben.

    
LAWRENCE 01.02.2015 22:56
quelle
1

Iteriere über eine for-Schleife, konvertiere die Eingangsnummer in binär, konvertiere dann die binäre Zahl in long und überprüfe, ob die Zahl durch die Eingangszahl teilbar ist.

Hier ist der Code:

%Vor%     
kedar 01.03.2015 10:33
quelle
1

So habe ich das in C gelöst, aber es dauert noch lange.

%Vor%     
Avinash 24.03.2015 13:05
quelle
0

Verwendete Methode von Andrew

%Vor%

}

    
monty 11.09.2015 12:02
quelle
0
%Vor%     
dmitrdv 22.11.2015 05:56
quelle
0

Hier ist meine Lösung:

Kleinste "Null-Eins" -Nummer S kann beliebig sein von {1,10,11,100,101,110,111,1000 ,. . . }, Die binäre Zahlen sind. also,

  1. durchlaufen Sie die Schleife
  2. Konvertiere sie in Binärdatei
  3. dividiere durch die Zahl N und suche nach einer Erinnerung.
  4. Drucken Sie das Ergebnis aus.

    klasse Programm {

    %Vor%

    } }

Zeeshan 24.11.2015 13:38
quelle
0

Voraussetzung: Für jede Zahl N, finden Sie eine Zahl S (+ ve Integer), die ein Vielfaches von N ist, aber eine Null-Eins-Zahl. Kurzer Algorithmus: Beginnen Sie mit 1 in einer Liste. Dann iteriere obige Liste und berechne folgende zwei Werte für jeden möglichen Wert dieser Liste %Code% %Code% %Code% x = list[i]*10;

Hier ist C # -Code (a hat einen Dummy-Wert)

%Vor%     
BilalS 02.05.2016 22:47
quelle
-1

Hier ist mein Algorithmus:

1) Beginnen Sie mit 10 (binär 2). 2) wandle dies in eine Zeichenfolge um, so dass es "10" ist 3) wandle diese Zeichenfolge in Dezimal 4) teile diese Dezimalzahl durch die Eingabe n. 5) addiere 1 in der Binärzahl 10, Ergebnis ist 11 6) wiederhole 2-5, bis der Rest 0 ist;

    
Neha Kumari 03.06.2016 10:04
quelle

Tags und Links