题目描述:可乐兑换
小明的班级参加一个活动,每人要喝过一瓶可乐,恰逢可乐促销,3瓶可乐空瓶可以换一瓶可乐,小明想节约钱,所以想买尽可能少的可乐让每人至少喝过一瓶可乐,问买至少多少瓶可乐够n人至少每人喝一瓶
输入
n:表示n个人要喝可乐(3 < n < = 10000)
输出
购买的可乐数和最终喝过多少瓶可乐,中间用一个空格隔开
样例输入
4 27
样例输出
3 4 19 28
思路:把买的可乐数量,喝的可乐数量和瓶子的数量保存起来,用DFS遍历,满足喝的人数即可退出搜索。
1 // 可乐兑换.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 6 #include <iostream> 7 using namespace std; 8 9 int n,buy,drink,bottle; 10 11 void DFS() 12 { 13 //cout << "buy:" << buy << " drink:" << drink << " bottle:" << bottle << endl; 14 if (drink >= n) return; 15 16 buy++; 17 drink++; 18 bottle++; 19 20 if (bottle == 3) 21 { 22 drink++; 23 bottle = 1; 24 } 25 DFS(); 26 27 } 28 29 30 int main() 31 { 32 while (cin>>n) 33 { 34 buy = 0; 35 drink = 0; 36 bottle = 0; 37 DFS(); 38 cout << buy << " " << drink<< endl; 39 } 40 return 0; 41 }