题解 | #百钱买百鸡问题#
百钱买百鸡问题
https://www.nowcoder.com/practice/74c493f094304ea2bda37d0dc40dc85b
这道题很好的复习了回溯,不错
#include <iostream> #include <bits/stdc++.h> #include <vector> using namespace std; vector<vector<int>>result; void backtracking(int money,vector<int>ans,int res_sum); int main() { //公鸡一只5块,母鸡一只3块,小鸡三只1块 int n; cin>>n; vector<int>ans; backtracking(100,ans,100); for(auto & i : result){ for(int j = 0;j<3;j++){ cout<<i[j]<<" "; } cout<<endl; } } void backtracking(int money,vector<int>ans,int res_sum){ if(ans.size()==3){ if(money==0&&res_sum==0){ result.push_back(ans); } return; } int n = ans.size(); if(n==0){//先装公鸡 for(int i = 0;5*i<=money;i++){ ans.push_back(i); money -= 5*i; res_sum -= i; backtracking(money, ans, res_sum); res_sum += i; money += 5*i; ans.pop_back(); } } else if(n==1){//该装母鸡了 for(int i=0;3*i<=money;i++){ ans.push_back(i); money -= 3*i; res_sum -= i; backtracking(money, ans, res_sum); res_sum += i; money += 3*i; ans.pop_back(); } } else if(n==2){//该装小鸡了 for(int i =0;i<=money*3;i+=3){ ans.push_back(i); money -= i/3; res_sum -=i; backtracking(money, ans, res_sum); res_sum +=i; money += i/3; ans.pop_back(); } } } // 64 位输出请用 printf("%lld")