题一:
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;
}