Paste
Pasted as C++ by registered user xujiayu ( 4 years ago )
#include <stdio.h>
#include <conio.h>
#include <math.h>
/*
nhap vao 1 so nguyen duong, sau do sap xep cac chu so o trong so nguyen duong do tang dan
ket qua la 1 so nguyen duong moi .
vd: nhap vao 31685127
=>so moi se la : 11235678
yeucau: khong dung mang , chi dung cac kien thuc ve if else , vong lap va ham.
*/
/*
y tuong :
tach cac chu so trong so ban dau ra . tim min trong cac chu so do.
sau khi tim duoc MIN ta de phong co nhieu bien MIN giong nhau cho nen ta dat 1 bien dem
de duyet het MIN.
sau do bat dau tim sang bien MIN tiep theo nhung thoa la phai lon hon bien MIN ban dau.
cu the nhan bien MIN tim duoc lan luot cho 10^(so luong chu so - 1)va cong don lai.
dieu kien dung se la khi bien min tim duoc no chinh la chu so lon nhat cua so ban dau
31685127
dau tien ra duoc Min = 1
sau do lay 1 * 10^7 luu vao S
sau do dem xem so 1 vua tim duoc co may so 1 ?
=> dem ra duoc co 2 so 1
=> minh co thieu 1 so 1 chua lam
S += 1 * 10^6
tiep tuc tim 1 bien MIN tiep theo nhung phai lon hon bien MIN ban dau.
=>Min = 2
S += 2 * 10^5
Dem xem co ton tai bao nhieu chu so 2 ?
=> chi co 1( chinh la so ban dau )
tiep tuc tim 1 bien MIN tiep theo nhung phai lon hon bien MIN vua tim duoc
=> Min = 3
S += 3 * 10^4
Dem xem co ton tai bao nhieu chu so 3 ?
=> chi co 1( chinh la so ban dau )
Tiep tuc tim bien Min tiep theo ... va cu the cong don lai se ra ket qua.
*/
//Ham tra ve so luong chu so dang co cua so x
int demsoluongchuso(int x)
{
int dem = 0;
while (x != 0)
{
x /= 10; //loai bo 1 chu so cuoi
dem++; //tang bien dem len
}
return dem; //tra ve so luong chu so
}
int chusoMax(int x)
{
int Max = -1;
while (x != 0)
{
int chuso = x % 10;
x /= 10;
if (chuso > Max )
{
Max = chuso;
}
}
return Max;
}
//Ham nay tra ve so sau khi da duoc sap xep tang da chu so.
int xulydulieu(int x)
{
int dem = demsoluongchuso(x);
int sum = 0;
int dem1 = dem;
int Min1 = -1;
int chusomax = chusoMax(x);
//lap dem lan
for (int i = 1; i <= dem; i++)
{
int Min = 9;
int temp = x;
while (temp != 0)
{
int chuso = temp % 10;
temp /= 10;
if(chuso < Min && chuso > Min1)
{
Min = chuso;
}
}
sum += Min * pow(10.0,dem1 - 1 );
dem1--;
temp = x;
//kiem tra tiep xem co bao nhieu chu so trung voi Min.
int dem2 = 0;
while (temp != 0)
{
int chuso = temp % 10;
temp /= 10;
if (chuso == Min)
{
dem2++;
}
}
for (int i = 2; i <= dem2; i++)
{
sum += Min * pow(10.0,dem1 - 1);
dem1--;
}
Min1 = Min;
if (Min1 == chusoMax(x))
{
break;
}
}
return sum;
}
int main()
{
int n = 912465937;
int ketqua = xulydulieu(n);
printf("\nket qua la %d",ketqua);
getch();
return 0;
}
Revise this Paste