1. Titelbeschreibung
Eingabespezifikation:
Ausgabespezifikation:
Beispiel Eingabe 1:
6767
Beispielausgabe 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
Beispiel Eingabe 2:
2222
Beispielausgabe 2:
2222 - 2222 = 0000
Zwei Ideen zur Problemlösung
Ordnen Sie bei einer vierstelligen Zahl die Ziffern dieser Zahl von der größten zur kleinsten und von der kleinsten zur größten neu an, reduzieren Sie dann die Zahl von der größten Zahl, führen Sie diese Operation für das Ergebnis aus und erhalten Sie schließlich die Zahl 6174. Lassen Sie uns die Mitte setzen Ausgabe verarbeiten. Meine Idee hier ist, jede Ziffer in einem Array zu speichern und dann von klein nach groß zu sortieren, von vorne nach hinten und von hinten nach vorne zu durchlaufen, die große und die kleine Zahl zu erhalten und sie dann zu subtrahieren. Beachten Sie, dass wenn die Differenz zwischen den beiden Zahlen gleich 0 ist, wir sie direkt ausgeben müssen. Und für die Nummer 6174 müssen wir auch den Berechnungsprozess ausgeben.
Drei, AC-Code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a > b;}
int cal(int num)
{
int digit[4], mxm = 0, mim = 0;
for(int i=3; i>=0; i--)
{
digit[i] = num%10;
num /= 10;
}
sort(digit, digit+4, cmp);
for(int i=0; i<4; i++)
mxm = mxm*10 + digit[i];
for(int i=3; i>=0; i--)
mim = mim*10 + digit[i];
int ans = mxm - mim;
printf("%04d - %04d = %04d\n", mxm, mim, ans);
return ans;
}
int main()
{
int num;
scanf("%d", &num);
if(num == 6174) cal(6174);
while(num != 6174)
{
num = cal(num);
if(num == 0) break;
}
return 0;
}