Pentru un numar natural n dat gasiti numarul natural minim m format cu aceleasi cifre. Ex. n=3658, m=3568.
flaviu23:
gf
VF=[0,0,0,0,0,0,0,0,0,0]
while(n>0):
UCif=n % 10;
VF[UCif]=VF[UCif]+1
n=n//10
return VF
def MinimDinN(n,VF):
VF=Frec(n)
i=0
while(i<10 and VF[i]==0):
i=i+1
if(i>0):
m=0
while(i<10):
while(VF[i]>0):
m=m*10+i
VF[i]=VF[i]-1
i=i+1
else:
i=1
while(i<10 and VF[i]==0):
i=i+1
m=i
VF[i]=VF[i]-1
i=0
while(i<10):
while(VF[i]>0):
m=m*10+i
VF[i]=VF[i]-1
i=i+1
print(m)
def Main():
n=int(input("da un numar:"))
VF=Frec(n);
MinimDinN(n,VF)
print("program terminat")
Main()
Răspunsuri la întrebare
Răspuns de
1
Pentru ca nu ai specificat cat de mare este nr natural...am considerat un numar mare de 10000 de cifre, iar numarul il citesc dintr-un fisier text ca in problema mincifre de pe pbinfo. Solutia de mai jos rezolva problema ta la caz general.
#include <bits/stdc++.h>
using namespace std;
char s[10020];
int n, i, v[10], a, val, p;
int main()
{
ifstream f("mincifre.in");
ofstream g("mincifre.out");
f.getline(s, sizeof(s));
for(i = 0; i < strlen(s); i ++)
{
val = s[i] - '0';
v[val] ++;
}
if(v[0] > 0) for(i = 1; i <= 9; i ++)
if(v[i] > 0)
{
g << i;
v[i] --; break;
}
for (i = 0; i <= 9; i ++)
while (v[i])
{
g << i;
v[i]--;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
char s[10020];
int n, i, v[10], a, val, p;
int main()
{
ifstream f("mincifre.in");
ofstream g("mincifre.out");
f.getline(s, sizeof(s));
for(i = 0; i < strlen(s); i ++)
{
val = s[i] - '0';
v[val] ++;
}
if(v[0] > 0) for(i = 1; i <= 9; i ++)
if(v[i] > 0)
{
g << i;
v[i] --; break;
}
for (i = 0; i <= 9; i ++)
while (v[i])
{
g << i;
v[i]--;
}
return 0;
}
Alte întrebări interesante
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Ed. muzicală,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă