求助
  • 板块学术版
  • 楼主ftzx
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/7/19 16:00
  • 上次更新2023/10/27 19:31:51
查看原帖
求助
614672
ftzx楼主2022/7/19 16:00
题目
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。

例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,7641-1467=6174,又回到了它自己!

现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数。

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4。
输入格式
输入文件名为kaprekar.in。
输入文件第一行是一个正整数n,表示有n组测试数据,
接下来的n行,每行一个各位数字不完全相同的四位数。  

输出格式
输出文件名为kaprekar.out。
对于每组测试数据输出一行,每行中只有一个整数,表示经过多少次操作才出现循环。

输入输出样列
输入样例1:
1
1234
输出样例1:
4
对于50% 的数据,0<n≤100;
对于 100% 的数据,0<n ≤ 10000 。
我的五十分代码
#include<bits/stdc++.h>
using namespace std;
int cnt;
string kkk(string s){
	string fs;
	int ss,sfs;
	fs=s;
	reverse(fs.begin(),fs.end());
	stringstream str,eam,sksk;
	str<<s;
	str>>ss;
	eam<<fs;
	eam>>sfs;
	int j=sfs-ss;
	sksk<<j;
	sksk>>s;
	cnt++;
	return s;
}
int main(){
	int T;
	cin>>T;
	string s;
	while(T--){
		cin>>s;
		while(1){
			sort(s.begin(),s.end());
			string sss;
			sss=kkk(s);
			s=sss;
			if(s=="6174"){
				cout<<++cnt<<endl;
				cnt=0;
				break;
			}
		}
	}
	return 0;
}
help
2022/7/19 16:00
加载中...