2020年西交915编程题

题一:

void solve(){
	for(int a = 0;a <= 9;a ++)
		for(int b = 0;b <= 9;b ++)
			for(int c = 0;c <= 9;c ++)
				for(int d = 0;d <= 9; d ++)
					if((a+c)*1000+(b+a)*100+(c+d)*10+(b+d) == 9102){
						cout<<a<<" "<<b<<" "<<c<<" "<<d;
						cout<<endl;
					}	
}

int main(){
	solve();
}

没有符合要求的结果。

题二:

int reverse(int num){
	int res = 0; //结果 
	while(num != 0){
		res = res * 10 +num % 10; //按位给num求反 
		num /= 10; //丢掉取余后的位数 
	}
	return res;  
} 

int main(){
	int n; //n个数组 
	cin>>n;
	int arr[n][2];
	for(int i = 0;i < n; i++)
		cin>>arr[i][0]>>arr[i][1]; //输入 
	for(int i = 0;i < n; i++)
		if(reverse(arr[i][0] + arr[i][1])== reverse(arr[i][0])+reverse(arr[i][1])) //和的反转等于反转的和 
			cout<<arr[i][0]<<" "<<arr[i][1];
}

题三:

vector<int> temp;
void dfs(vector<int>& val,int cur,int& count){
	if(accumulate(temp.begin(),temp.end(),0) == 200){ //求和
		count++;
		//输出符合条件的方案
		for(int i = 0;i < temp.size();i ++) cout<<temp[i]<<" ";
		cout<<endl;
	}else if(accumulate(temp.begin(),temp.end(),0) > 200) return; //剪枝,大于200不必再走 
	for(int i = cur;i < val.size();i ++){
		temp.push_back(val[i]); //选i 
		dfs(val,i,count);
		temp.pop_back(); //不选i 
	}
	
} 

int main(){
	int N; //物品个数 0<=n<=40
	cin>>N;
	vector<int> val(N);
	for(int i = 0;i < val.size();i ++) cin>>val[i]; 
	int count = 0;
	cout<<"可能的方案:"<<endl; 
	dfs(val,0,count);
	cout<<"总的方案数:"<<count<<endl; 
}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiawen9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值