50pts捏,求助
查看原帖
50pts捏,求助
912567
wyc0809楼主2023/11/4 20:46

代码如下

#include<bits/stdc++.h>
using namespace std;
long long n,k,ans;
string s,s2,s3[1000005];
bool b=0;
void dfs(long long num,long long num2,string s){
	if(num>k){
		return ;
	}
	for(int i=num2+1;i<n;i++){
		ans++;
		if(s[i]=='0'){
			s[i]='9';
			s3[ans]=s;
			dfs(num+1,i,s);
			s[i]='0';
		}
		else {
			s[i]--;
			s3[ans]=s;
			dfs(num+1,i,s);
			s[i]++;
		}
	}
}
void dfs2(long long num,long long num2,string s){
	if(num>k){
		return ;
	}
	for(int i=num2+1;i<n;i++){
		ans++;
		if(s[i]=='9'){
			s[i]='0';
			s3[ans]=s;
			dfs(num+1,i,s);
			s[i]='9';
		}
		else {
			s[i]++;
			s3[ans]=s;
			dfs(num+1,i,s);
			s[i]--;
		}
	}
}
int main() {
	cin>>n;
	cin>>s;
	cin>>k;
	if(s.size()<n){
		for(int i=1;i<=n-s.size();i++){
			s2+='0';
		}
		s2+=s;
		s=s2;
	}
	s2=s;
	dfs(1,-1,s2);
	dfs2(1,-1,s2);
	ans++;
	s3[ans]=s2;
	sort(s3+1,s3+ans+1);
	for(int i=1;i<=ans;i++){
		if(s3[i]!=s3[i-1]){
			b=1;
			for(int j=0;j<n;j++){
				if(b==1&&s3[i][j]=='0'&&j==n-1){
					cout<<0;
				}
				if(b==1&&s3[i][j]!='0'){
					b=0;
				}
				if(b==0){
					cout<<s3[i][j];
				}
			}
			cout<<endl;
		}
	}
	return 0;
}

另外试问,如果经过变换后为0,还要输出吗?

2023/11/4 20:46
加载中...