PAT Grade A 1069 Das Schwarze Loch der Zahlen (20 Punkte) | C ++ - Implementierung

1. Titelbeschreibung

Ursprünglicher Titellink
Fügen Sie hier eine Bildbeschreibung ein

Eingabespezifikation:

Fügen Sie hier eine Bildbeschreibung ein

Ausgabespezifikation:

Fügen Sie hier eine Bildbeschreibung ein

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;
}

Ich denke du magst

Origin blog.csdn.net/weixin_42393947/article/details/108707371
Empfohlen
Rangfolge