-
问题描述
试题编号: | 201709-1 |
试题名称: | 打酱油 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。 输入格式 输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。 输出格式 输出一个整数,表示小明最多可以得到多少瓶酱油。 样例输入 40 样例输出 5 样例说明 把40元分成30元和10元,分别买3瓶和1瓶,其中3瓶送1瓶,共得到5瓶。 样例输入 80 样例输出 11 样例说明 把80元分成30元和50元,分别买3瓶和5瓶,其中3瓶送1瓶,5瓶送2瓶,共得到11瓶。 |
-
解题思路
#include<iostream>
using namespace std;
int main()
{int BottleNum = 0;int N, GroupNum_3, GroupNum_5, TotalPrice;GroupNum_3 = 0;//3瓶的组数GroupNum_5 = 0;//5瓶的组数TotalPrice = 0;cin>>N;for(int i = 0; i <= N/30; i++){//i代表多少组3瓶for(int j = 0; j <= N/50; j++){//j代表多少组5瓶int temp = i*3*10+j*5*10;if(temp <= N){if(TotalPrice < temp){TotalPrice = temp;GroupNum_3 = i;GroupNum_5 = j;}}}}BottleNum = (N-TotalPrice)/10 + GroupNum_3*4 + GroupNum_5*7;cout<<BottleNum;
}
-
经验总结
使用遍历解空间的方法求最优解。如果你学过算法设计与分析会发现这种遍历解空间的方法是很常见的(当然没这么简单吼吼吼)。
最后求瓶子总数时忘记将瓶子组数乘以瓶子每组的数量,导致卡了一下。
知识点。C语言规定:变量必须是以英文字母或下划线开头的,由字母、数字和下划线组成的字符序列。