90 警示后人
查看原帖
90 警示后人
654958
Light_az楼主2023/1/14 11:21

90 分

#include<bits/stdc++.h>
#define ll long long
#define F(i,a,b) for (int i=a;i<=b;i++)
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=1e7+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,ans=0,t=0,l,r,len,T,ans1,ans2;
ll mini=INT_MAX,maxi=0,Mod;
string s1,s2;
ll a[N];
int main(){
	while(cin>>n){
		ll step[30],id=1,last,Can=0;
		while(1){
			t=0,ans1=0,ans2=0;
			while(n){
				a[++t]=n%10;
				n/=10;
			}
			sort(a+1,a+1+t);
			for(int i=1;i<=t;i++) ans1=ans1*10+a[i];
			for(int i=t;i>=1;i--) ans2=ans2*10+a[i];
			n=ans2-ans1;
			for(int i=1;i<=id;i++){
				if(step[i]==n) Can=1;
				if(Can) cout<<step[i]<<" ";
			} 
			step[++id]=n;
			if(Can){
				cout<<"\n";
				break;
			}
		}
	}

	return 0;
}

100 分

#include<bits/stdc++.h>
#define ll long long
#define F(i,a,b) for (int i=a;i<=b;i++)
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=1e7+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,ans=0,t=0,l,r,len,T,ans1,ans2;
ll mini=INT_MAX,maxi=0,Mod;
string s1,s2;
ll a[N];
int main(){
	while(cin>>n){
		ll step[30],id=1,last,Can=0;
		step[1]=n;
		while(1){
			t=0,ans1=0,ans2=0;
			while(n){
				a[++t]=n%10;
				n/=10;
			}
			sort(a+1,a+1+t);
			for(int i=1;i<=t;i++) ans1=ans1*10+a[i];
			for(int i=t;i>=1;i--) ans2=ans2*10+a[i];
			n=ans2-ans1;
			for(int i=1;i<=id;i++){
				if(step[i]==n) Can=1;
				if(Can) cout<<step[i]<<" ";
			} 
			step[++id]=n;
			if(Can){
				cout<<"\n";
				break;
			}
		}
	}

	return 0;
}

应该是 n 本身就是循环数? 供后人参考一下吧

2023/1/14 11:21
加载中...