某品牌巧克力使用500克原料可制作55小块巧克力,请编程实现:输入原料重量(以千克为单位),计算出制作巧克力的块数(四舍五入)。然后对这些巧克力进行分包,小盒放11块,大盒放24块,问各分装多少大盒多少小盒剩余巧克力块数最少。
不要太高深
算出总数
循环减去大盒块数(第一次先减0),剩余数量与小盒块数求余,记录最小的数字及对应盒数组合(为0则直接结束循环)
没有用到什么数学原理,上面的基本算法可以考虑优化方案以减少循环次数
http://blog.csdn.net/sinat_26594567/article/details/48008489?locationNum=1&fps=1
int main(){
while (true) {
cout << "请输入您的原料重量";
double a;
scanf("%lf",&a);
int x=(a*110)+0.5;//x为制作出来的数量,四舍五入
string s="您制作了",ss="个巧克力\n";
cout << s << x<< ss;
int b=x%11;//假设全部使用小盒子
int c=x%24;//假设全部使用大盒子
int d=x%35;//一个大盒子,一个小盒子
if (b==0) {
cout << "使用了" <<x/11<< "个小盒子,剩余0个";
}else if(c==0){
cout << "使用了" <<x/24<< "个大盒子,剩余0个";
}else if(d==0){
cout << "使用了" <<x/35<< "个大和" << x/35 << "盒子,剩余0个";
}else{
int min=10;
if (b<min) {
min=b;
cout << "使用了" <<x/11<< "个小盒子,剩余" << min << "个";
}
if (c<min) {
min=c;
cout << "使用了" <<x/24<< "个大盒子,剩余" << min << "个";
}
if (d<min) {
min=d;
cout << "使用了" <<x/35<< "个大和" << x/35 << "盒子,剩余" << min << "个";
}
}
}
}
//
// main.cpp
// Myfirst
//
// Created by 孙思远 on 2016/10/19.
// Copyright © 2016年 孙思远. All rights reserved.
//
#include <iostream>
#include <iomanip>
using namespace std;
int small=0,big=0;
/*获取剩余的数量*/
int getSurplus(int x){
int b=x%11;//假设全部使用小盒子
int c=x%24;//假设全部使用大盒子
if (b==0) {
small+=x/11;
return b;
}else if(c==0){
big+=x/24;
return c;
}else {
if (x>24) {
int max=b>c?b:c;
if (max>=11) {
if (max==b) {
small+=x/11;
}else{
big+=x/24;
}
int min=getSurplus(max);
return min;
}
}
int min=b<c?b:c;
if (min==b) {
small+=x/11;
}else{
big+=x/24;
}
return min;
}
return 0;
}
int main(){
while (true) {
small=big=0;
printf("请输入您的原料重量\n");
double a;
scanf("%lf",&a);
int x=(a*110)+0.5;//x为制作出来的数量,四舍五入
printf("您制作了%d个巧克力\n",x);
int k=getSurplus(x);
while (k>11) {
k=getSurplus(k);
}
printf("剩余%d个\n",k);
printf("使用了%d个小盒子,%d个大盒子\n",small,big);
}
}
整个下午全给你思考问题,验证问题了。。。
if (x>24) {//如果输入的个数不能满足大盒子,那么直接跳过大盒子,运算小盒子
int max=b>c?b:c;
if (max>=11) {//如果全部使用大盒子,那么如果剩下了的巧克力大于小盒子的容量,那么就可以使用小盒子
if (max==b) {
small+=x/11;//对小盒子的个数进行叠加,获取最终用了多少小盒子
}else{
big+=x/24;//同上,大盒子
}
int min=getSurplus(max);//重新进入运算,分配小盒子
return min;
}
}
int min=b<c?b:c;//分配最终的小盒子
if (min==b) {
small+=x/11;//同上面的解释
}else{
big+=x/24;//同上面的解释
}
return min;//返回剩余的数量