Problema de pe pbinfo #3677:
Cerința:
Se dau două numere naturale n și k. Determinați cea mai mare valoare care se poate obține eliminând din numărul n exact k cifre aflate pe poziții alăturate(una după alta).
Date de intrare:
Fișierul de intrare va conține pe prima linie numărul n și pe a doua linie nunărul k.
Date de ieșire:
În fișierul de ieșire se va scrie pe prima linie valoarea cerută.
Restricții și precizări:
- n este un număr cuprins între 10 și 10^17 inclusiv.
- 1 ≤ k < numărul de cifre ale lui n.
- pentru 50 de puncte k este 1.
Exemplul 1:

cifrevecine.in

10002
3

cifrevecine.out

12

Exemplul 2:

cifrevecine.in

1938
2

cifrevecine.out

38


Răspuns :

Răspuns:

#include <fstream>

#include <iostream>

using namespace std;

int main()

{

int n,i=0, nr,k;

char a[18];

ifstream f("cifrevecine.in");

ofstream g("cifrevecine.out");

while (!f.eof())

{

   i++;

   f>>a[i];

}

f.close();

k=a[i-1]-'0';

n=i-2;

i=1;

while (a[i]>=a[i+k] && i+k<n) i++;

if(i+k<n)

  {for (nr=1;nr<i;nr++) g<<a[nr];

  for (nr=i+k;nr<=n;nr++) g<<a[nr];

  }

else

   if(i+k==n)

   for(nr=1;nr<=i;nr++) g<<a[nr];

  else

   for(nr=1;nr<n;nr++) g<<a[nr];

g.close();

}

Explicație:

Solutie de 95 p. Nu-mi dau seama ce caz exceptional nu este inclus aici...