Răspuns :
Am reusit intr-un final sa o fac de 100p.
#include <iostream>
#include <fstream>
using namespace std;
int minim(int v[], int n)
{
int min = 10;
for (int i = 9; i >= 0; i--)
if (v[i] && i < min)
min = i;
return min;
}
int maxim(int v[], int n)
{
int max = -1;
for (int i = 0; i <= 9; i++)
if (v[i] && i > max)
max = i;
return max;
}
int v[10];
int main()
{
ifstream in("magnitudine.in");
ofstream out("magnitudine.out");
unsigned long long n;
int k, x[10], y[10], m1, m2, m3 = 10;
in >> n >> k;
while(n)
{
v[n % 10]++;
n /= 10;
}
for (int i=0; i<10; i++)
{
x[i] = v[i];
y[i] = v[i];
}
// Incerci sa scazi magnitudinea stergand cifra minima
for (int i=0; i<k; i++)
x[minim(x, 10)]--;
m1 = maxim(x, 10) - minim(x, 10);
// Incerci sa scazi magnitudinea stergand cifra maxima
for (int i=0; i<k; i++)
v[maxim(v, 10)]--;
m2 = maxim(v, 10) - minim(v, 10);
if (k == 2)
{
// Se sterge cifra minima si cifra maxima, de ex. pentru 1459 (cazul pt. 100p)
y[maxim(y, 10)]--;
y[minim(y, 10)]--;
m3 = maxim(y, 10) - minim(y, 10);
}
if (m2 > m3)
swap(m2, m3);
if (m1 > m2)
swap(m1, m2);
if (m1 > m3)
swap(m1, m3);
out << m1;
return 0;
}
#include <iostream>
#include <fstream>
using namespace std;
int minim(int v[], int n)
{
int min = 10;
for (int i = 9; i >= 0; i--)
if (v[i] && i < min)
min = i;
return min;
}
int maxim(int v[], int n)
{
int max = -1;
for (int i = 0; i <= 9; i++)
if (v[i] && i > max)
max = i;
return max;
}
int v[10];
int main()
{
ifstream in("magnitudine.in");
ofstream out("magnitudine.out");
unsigned long long n;
int k, x[10], y[10], m1, m2, m3 = 10;
in >> n >> k;
while(n)
{
v[n % 10]++;
n /= 10;
}
for (int i=0; i<10; i++)
{
x[i] = v[i];
y[i] = v[i];
}
// Incerci sa scazi magnitudinea stergand cifra minima
for (int i=0; i<k; i++)
x[minim(x, 10)]--;
m1 = maxim(x, 10) - minim(x, 10);
// Incerci sa scazi magnitudinea stergand cifra maxima
for (int i=0; i<k; i++)
v[maxim(v, 10)]--;
m2 = maxim(v, 10) - minim(v, 10);
if (k == 2)
{
// Se sterge cifra minima si cifra maxima, de ex. pentru 1459 (cazul pt. 100p)
y[maxim(y, 10)]--;
y[minim(y, 10)]--;
m3 = maxim(y, 10) - minim(y, 10);
}
if (m2 > m3)
swap(m2, m3);
if (m1 > m2)
swap(m1, m2);
if (m1 > m3)
swap(m1, m3);
out << m1;
return 0;
}