PAT Grade A 1069 Le trou noir des nombres (20 points) | Implémentation C ++

1. Description du titre

Lien du titre original
Insérez la description de l'image ici

Spécification d'entrée:

Insérez la description de l'image ici

Spécification de sortie:

Insérez la description de l'image ici

Exemple d'entrée 1:

6767

Exemple de sortie 1:

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174

Exemple d'entrée 2:

2222

Exemple de sortie 2:

2222 - 2222 = 0000

Deux idées de résolution de problèmes

Étant donné un nombre à quatre chiffres, réorganisez les chiffres de ce nombre du plus grand au plus petit et du plus petit au plus grand, puis réduisez le nombre du plus grand nombre, puis effectuez cette opération sur le résultat, et enfin obtenez le nombre 6174, mettons le milieu Sortie de processus. Mon idée ici est de stocker chaque chiffre dans un tableau, puis de trier de petit à grand, de traverser d'avant en arrière et d'arrière en avant, d'obtenir le grand nombre et le petit nombre, puis de les soustraire. Notez que si la différence entre les deux nombres est égale à 0, nous devons la sortir directement. Et pour le nombre 6174, nous devons également sortir le processus de calcul.

Trois, code AC

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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42393947/article/details/108707371
conseillé
Classement