原题链接:蓝桥杯算法提高VIP-数字黑洞
思路:4312-> 3087 ->8352 -> 6174,经过三次变换,得到6174
从题举例子和描述可以发现主要就是:
只要n!=6174,就一直拆解n,字典序最大,最小分别各排一次n的各个位数,
再做差赋给n;因此while,sprintf,sscanf,sort,reverse便可解决
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,sum=0,min,max;
cin>>n;
char s[5];
while(n!=6174)
{
sprintf(s,"%d",n); //把整形转换为字符串。
sort(s,s+4); //把字符串中各个数字由小到大排序,得min
sscanf(s,"%d",&min); //输入到整形min中,(没有前导0)
reverse(s,s+4); //反转s,即把s中数字由大到小排序 ,得max
sscanf(s,"%d",&max); // 输入到整形max中
n=max-min;
sum++;
}
cout<<sum<<endl;
return 0;
}
6 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复