【入门】数组练习:验证下面结论 【数组】

来源:互联网 发布:通达信 kdj源码 编辑:程序博客网 时间:2024/05/14 02:01

题目描述

Description

验证下面结论: 一个各位数字不同且都不为0的N位数X(3<=N<=5), 将组成该数的各位数字重新排列成一个最大数和一个最小数作减法, 其差值再重复前述运算,

若干次后必出现一个N位数Y, 使之重复出现. 例如: X=213, 则有213→321-123=198

981-189=792

982-289=693

963-369=594

954-459=495

954-459=495

这时Y=954. (注意:重复不仅仅是与上一次的数相同,也可能是出现成段的多个数反复重复)

输入

一个数X

输出

相减几次后开始重复出现。

样例输入

213

样例输出

5

提示


解释:


输入:1234


4321-1234=3087


8730- 378 =8352


8532- 2358= 6174


7641 -1467= 6174



所以减3次后开始循环。


输出应为3次


#include <iostream>#include <cmath>using namespace std;void splite(int num,int& maxNum,int& minNum){int n=0,a[5]={0},i,j,t;while(num>0){a[n++]=num%10;num/=10;}for(i=0;i<n-1;i++){for(j=n-1;j>i;j--){if(a[j]<a[j-1]){t=a[j];a[j]=a[j-1];a[j-1]=t;}}}maxNum=0;minNum=0;for(i=0;i<n;++i){maxNum+=a[i]*(int)pow(10.0,i);minNum+=a[i]*(int)pow(10.0,n-i-1);}}int main(){int num,maxNum=0,minNum=0,xMax=0,x,t=0,y=0;cin>>num;splite(num,maxNum,minNum);x=maxNum-minNum;while(y!=x){y=x;        splite(x,maxNum,minNum);x=maxNum-minNum;++t;}cout<<t<<endl;return 0;}


0 0
原创粉丝点击