FAQ | About | Discuss
题意:
把输入的数各个位上的数重新排列,最大数减最小数到6174结束,输出 所有的差,中间用空格分开,然后输出所有的差的个数
分析:
递归,
代码:
#include<bits/stdc++.h>
using namespace std;
int a[4],p=0;
int comp(int a,int b){
return a>b;}
int Do()
{
int i,s=0;
for(i=0;i<4;i++)
s=a[i]+s*10;
return s;
}
void Vp()
{
int s,f,i;
sort(a,a+4,comp);
s=Do();
sort(a,a+4);
f=Do();
s=s-f;
if(s==6174){
cout<<s<<" ";
p++;
return ;
}
cout<<s<<" ";
p++;
for(i=0;i<4;i++,s/=10)
a[i]=s%10;
Vp();
return ;
}
int main()
{
int n,i;
while(cin>>n)
{
p=0;
for(i=0;i<4;i++,n/=10)
a[i]=n%10;
Vp();
cout<<endl<<p<<endl;
}
}
感受:
就是注意空格,最后一个后面也要跟空格。。。容易忘了