PAT乙级(Basic Level)真题 1009.数字黑洞

来源:互联网 发布:aja system test mac 编辑:程序博客网 时间:2024/04/30 01:15

题目地址


点击打开链接


解题思路


数字按位拆分重组,循环做差。

注意打印的所有数字都要保证是4位!

PS.被大神说了,我再也不暴力求解了,以后都用循环。。。


AC代码如下:

#include <iostream>#include <algorithm>using namespace std;bool cmp( int a,int b ){    return a>b;}/*数组存放各位数,以保证打印出的数字是四位*/int s[4];void trans( int n ){    for( int i=3;i>=0;--i ){        s[i] = n%10;        n /= 10;    }}int main(){    int n;    cin>>n;    int a[4];//存放差的各位数    int result = n;    while( 1 ){//不能用while(result!=6174),因为输入6174也需要打印一遍做差过程        for( int i=3;i>=0;--i ){            a[i] = result%10;            result /= 10;        }        sort( a,a+4,cmp );        int n1 = a[0]*1000+a[1]*100+a[2]*10+a[3];        int n2 = a[0]+a[1]*10+a[2]*100+a[3]*1000;        result = n1 - n2;        trans(n1);        for( int i=0;i<4;++i )  cout<<s[i];        cout<<" - ";        trans(n2);        for( int i=0;i<4;++i )  cout<<s[i];        cout<<" = ";        trans(result);        for( int i=0;i<4;++i )  cout<<s[i];        cout<<endl;        if( result==6174 || ( a[0]==a[1] && a[1]==a[2] && a[2]==a[3] ) )            break;    }    return 0;}


0 0
原创粉丝点击