30分,求大佬指出问题
查看原帖
30分,求大佬指出问题
1138579
Lazy_Durant楼主2024/3/22 22:06
#include<iostream>
using namespace std;
const int N=100;
int a[N],A,B,n,com[N];
void check(){
	int idx=0;
	for(int i=1;i<=n;i++){
		if(a[i]>com[i]){
			idx=1;
			break;
		}
		if(a[i]<com[i]) break;
	}
	if(idx){
		for(int i=1;i<=n;i++) com[i]=a[i];
	}
}
void dfs(int i,int l,int r){
	check();
	if(i>n||(l+r==A+B)){
		return ;
	}
	if(a[i]==9){
		dfs(i+1,l,r);
		return;
	}
	//向前走到9 
	if(l<A){
		int t1=a[i];
		//如果能走到9,那就走 
		if(A-l>=9-a[i]){
			a[i]=9;
			dfs(i+1,l+9-a[i],r);
		}//如果不能,那就尽量往前走 
		else{
			a[i]+=(A-l);
			dfs(i+1,A,r);
		}
		a[i]=t1;
	} 
	//向后走到9 
	if(r<B){
		int t2=a[i];
		//能走到,就对它进行处理 
		if(B-r>=a[i]+1){
			a[i]=9;
			dfs(i+1,l,r+a[i]+1);
			a[i]=t2;
		}else{
			//如果不能走,就不处理 
			dfs(i+1,l,r);
		} 
	} 
}
int main(){
	string str;
	cin>>str>>A>>B;
	n=str.length();
	for(int i=1;i<=n;i++){
		a[i]=str[i-1]-'0';
		com[i]=a[i];
	}
	dfs(1,0,0);
	for(int i=1;i<=n;i++) cout<<com[i];
	return 0; 
} 
2024/3/22 22:06
加载中...