Informatică, întrebare adresată de flaviu23, 9 ani în urmă

Pentru un numar natural n dat gasiti numarul natural minim m format cu aceleasi cifre. Ex. n=3658, m=3568.


flaviu23: gf
mirceaienciu: def Frec(n):
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 express
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;
}
Alte întrebări interesante