5.1
A1069
题目意思:

输入:

输出:

解题思路:

参考代码:
#include<iostream>
#include<algorithm>
using namespace std;
/*
解题思路:
1.这道题中,也就是除了数字为6174或者0000,剩下的都要输出,在输出完之后可以判断上一次计算结果是否为6174
或者0000,如果是则退出循环(当然循环设置为死循环),否则继续循环
2.注意在输入过程中,字符串s有可能不是4位,所以最左边要补0,而且在循环中计算出来的结果,如果不足4位也要
进行补位
*/
bool cmp(char a, char b)
{
return a>b;
}
int main()
{
string s;
cin >> s;
s.insert(0,4-s.length(),'0');//如果字符串不足4位则左边补0
while(1)
{
sort(s.begin(),s.end());
string smin=s;
int minn=stoi(smin); //字符串排列成最小的值
sort(s.begin(),s.end(),cmp);
string smax=s;
int maxn=stoi(smax); //字符串排列成最大值
int n= maxn-minn;
printf("%04d - %04d = %04d\n",maxn,minn,n);
if(n==0 || n==6174)
break;
s=to_string(n);
s.insert(0,4-s.length(),'0'); //注意在最后算出来的结果中,也有可能不是4位,所以也要左边补0
}
return 0;
}
注意事项:
1.输入完字符串之后和在循环体计算出新的字符串一定要对其进行补位,否则会报错


本文深入探讨了6174数字游戏的算法实现,详细解释了如何通过不断迭代,从任意四位数出发,经过特定操作最终达到固定点6174的过程。文章提供了完整的解题思路和参考代码,特别关注了字符串补位和循环判断等关键细节。
1000

被折叠的 条评论
为什么被折叠?



