Problemă rezolvată șir de caractere clasa a XI-a mate-info neintensiv #5

Enunț

Se citește de la tastatură un număr întreg cu maxim 8 cifre. Să se elimine o cifră aleasă astfel încât numărul rămas să aibă cifrele în ordine crescătoare. Dacă sunt mai multe soluții se vor afișa toate, iar dacă problema nu are nici o soluție se va tipări un mesaj.

Exemplu: pentru m=2435, poate fi eliminată cifra 3 rămânând numărul 245, sau cifra 4 rămânând numărul 235.

Rezolvare

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
 char s[9];
 int l;

 cout << "Introduceti un numar: ";
 cin >> s;
 l = strlen(s);

 bool existaSolutie = false;
 for (int i = 0; i < l; ++i)
 {
  char s2[9];
  strcpy_s(s2, s);

  for (int j = i + 1; j < l; ++j)
  {
   s2[j - 1] = s2[j];
  }
  s2[l - 1] = '\0';

  bool sc = true;
  for (int j = 1; j < l - 1; ++j)
  {
   if ((s2[j - 1] - '0') > (s2[j] - '0'))
   {
    sc = false;
    break;
   }
  }

  if (sc)
  {
   cout << s2 << endl;
   existaSolutie = true;
  }
 }

 if (!existaSolutie)
 {
  cout << "Nu exista solutii." << endl;
 }

 return 0;
}

Vizual

Explicații

strcpy_s este varianta sigură a strcpy în Visual C++, folosită fiindcă strcpy dă eroare de compilare.

Exemple de încercat:

  • 123456
  • 5432

Niciun comentariu:

Trimiteți un comentariu