白书练习 6174问题

来源:互联网 发布:网络教育怎么上课 编辑:程序博客网 时间:2024/06/07 09:35
////  main.cpp//  6174问题////  Created by 张嘉韬 on 16/1/29.//  Copyright © 2016年 张嘉韬. All rights reserved.//#include <iostream>#include <cstring>#include <algorithm>using namespace std;int cmp1(const void *a,const void *b)//从小到大{    return *(int *)a-*(int *)b;}int cmp2(const void *a,const void *b)//从大到小{    return *(int *)b-*(int *)a;}int main(int argc, const char * argv[]) {    int n,flag,map[20];    int  a[5],b[5],c[5];    cin>>n;    cout<<n<<"->";    memset(a,0,sizeof(a));    memset(b,0,sizeof(b));    memset(c,0,sizeof(c));    memset(map,0,sizeof(map));    for(int i=0;i<4;i++) a[i]=n%10,n=n/10;    flag=0;    while(flag==0)    {        memset(map,0,sizeof(map));        flag=1;        for(int i=0;i<4;i++) {c[i]=b[i]=a[i];map[a[i]]=1;}        qsort(b,4,sizeof(b[0]),cmp2);        qsort(c,4,sizeof(c[0]),cmp1);        for(int i=3;i>=0;i--)        {            if(b[i]-c[i]<0) b[i-1]--,a[i]=b[i]+10-c[i];            else a[i]=b[i]-c[i];        }        for(int i=0;i<4;i++)        {            cout<<a[i];            if(map[a[i]]==0) flag=0;        }        if(flag!=1) cout<<"->";    }    return 0;}

0 0
原创粉丝点击