Problem des digitalen Schwarzen Lochs

Frage

1069 Das schwarze Loch der Zahlen (20 分)
Für jede 4-stellige ganze Zahl, außer denen, bei denen alle Ziffern gleich sind, entsteht eine neue Zahl, wenn wir die Ziffern zuerst in nicht aufsteigender Reihenfolge und dann in nicht absteigender Reihenfolge sortieren kann man erhalten, indem man die zweite Zahl von der ersten nimmt. Wenn wir es auf diese Weise wiederholen, landen wir bald bei der Zahl 6174 – dem schwarzen Loch der 4-stelligen Zahlen. Diese Zahl heißt Kaprekar Constant.

Wenn wir beispielsweise bei 6767 beginnen, erhalten wir:

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
Sie sollen anhand einer beliebigen 4-stelligen Zahl veranschaulichen, wie sie in das Schwarze Loch gelangt.

Eingabespezifikation:
Jede Eingabedatei enthält einen Testfall, der eine positive ganze Zahl N im Bereich (0,10
4
) ergibt.

Ausgabespezifikation:
Wenn alle 4 Ziffern von N gleich sind, drucken Sie die Gleichung N - N = 0000 in einer Zeile aus. Andernfalls drucken Sie jeden Berechnungsschritt in einer Zeile aus, bis 6174 als Differenz ausgegeben wird. Alle Zahlen müssen als 4-stellige Zahlen gedruckt werden.

Beispieleingabe 1:
6767
Keine Leerzeile am Ende
Beispielausgabe 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174 Keine
Leerzeile am Ende
Beispieleingabe 2:
2222
Keine Leerzeile am Ende das Ende
Beispielausgabe 2:
2222 - 2222 = 0000

Gedankengang

Verwenden Sie sprintf, um jeden Unterschied in ein char-Array einzulesen. Char-Typ – „0“ kann int sein.

der Code

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int main(){
    
    
    int n,first,second,diff;
    scanf("%d",&n);
    diff = n;
    if(n == 6174)
        printf("7641 - 1467 = 6174\n");
    while (diff!=6174){
    
    
        char digtis[maxn]={
    
    '0'};
        sprintf(digtis,"%04d",diff);
        sort(digtis,digtis+strlen(digtis));
        first = (digtis[3]-'0')*1000+(digtis[2]-'0')*100+(digtis[1]-'0')*10+(digtis[0]-'0');
        second = (digtis[0]-'0')*1000+(digtis[1]-'0')*100+(digtis[2]-'0')*10+(digtis[3]-'0');
        diff = first - second;
        printf("%04d - %04d = %04d\n",first,second,diff);
        if(diff==0||diff==6174)break;
    }
    return 0;
}

Zusammenfassen

Zwei große Probleme:
1. Timeout-Problem: Wenn die Subtraktion zweier Zahlen gleich 0 ist, müssen Sie unterbrechen, da sonst die Endlosschleife abläuft.
2. Wenn die zu Beginn eingegebene Zahl 6174 ist, ist eine besondere Beurteilung erforderlich.

Supongo que te gusta

Origin blog.csdn.net/qq_19272233/article/details/119465616
Recomendado
Clasificación