问题描述 :
涛涛立志要做新好青年,他最近在学做菜。由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上字母A,B,C,D。
涛涛现在会做的菜有五种:
1、 西红柿炒鸡蛋 原料:AABDD
2、 酸辣鸡丁 原料:ABCD
3、 宫保鸡丁 原料:CCD
4、 水煮西红柿 原料:BBB
5、 怪味蛋 原料:AD
这天早上,开开去早市给涛涛买了一些原料回来。由于事先没有什么计划,涛涛决定,对于现存的原料,每次尽量做菜单上靠前(即编号小)的菜。
现在请你写一个程序,判断一下开开和涛涛中午能吃到哪些菜。
输入说明 :
共4个整数a,b,c,d。分别表示开开买的A,B,C,D这4种原料的数量。每种原料不会超过30份。
输出说明 :
输出5行。其中第i行表示涛涛做的第i种菜的数目。
看着很简单就是半天才出来-_-
#include <stdio.h>
#include<math.h>
typedef struct{
int a,b,c,d;
}num;
//求数组中的最小值
int min_value(int a[],int n){
int min,i;
min=0;
for(i=0;i<n;i++){
if(a[i]<a[min]){
a[min]=a[i];
}
}
return a[min];
}
int main(){
int i,x,y,z,w,min,k,j;
int b[4];
num a[5];
//菜单需要的菜料
a[0].a=2;a[0].b=1;a[0].c=0;a[0].d=2;
a[1].a=1;a[1].b=1;a[1].c=1;a[1].d=1;
a[2].a=0;a[2].b=0;a[2].c=2; a[2].d=1;
a[3].a=0;a[3].b=3;a[3].c=0; a[3].d=0;
a[4].a=1;a[4].b=0;a[4].c=0; a[4].d=1;
scanf("%d%d%d%d",&x,&y,&z,&w);
//计算开始,从第一份开始,目前拥有的菜料最多可以做多少份菜单X,你自己手算怎么算,就让计算机怎么算
for(i=0;i<5;i++){
j=0;
if(x>0 || y>0 || z>0 || w>0){
//不要问为什么有个判断
if(a[i].a>0){
b[j++]=x/a[i].a;
}
if(a[i].b>0)
b[j++]=y/a[i].b;
if(a[i].c>0)
b[j++]=z/a[i].c;
if(a[i].d>0)
b[j++]=w/a[i].d;
k=min_value(b,j);//说明只能最多做k份菜单i
printf("%d\n",k);
//做完第i份菜剩下多少原料
if(k>0){
x-=a[i].a*k;
y-=a[i].b*k;
z-=a[i].c*k;
w-=a[i].d*k;
}
}
//x,y,z,w都为0就不用做菜了
else
printf("0\n");
}
return 0 ;
}
--------更19:12------
这道题在大群里我看好多人说,就想着在这里和大家聊两句。我看了你们在群里的聊天,哈哈,谢谢你们这么友好地夸赞我,谢谢啦!然而事实本人也特别菜!没有谦虚的成分!!!哪能一小时写出来这么多,做完后全部发出来的(尴尬,发了二十道题用了一个多小时 哈哈哈)大家可以看我之前的博客,大部分是关于复试做过的题,写下来绝不是为了“炫耀”,就是纯粹记下来攒着以后可以看看思路。一不小心有人注意到我,这是我的幸运,我很珍惜这一点!,我很感谢@InnerSky900,这是第一位关注我的人,让我这个菜鸡激动了半天,后来发现他更厉害,机缘巧合我们竟然早就加了好友,哈哈哈,世界真奇妙。
看到这里的小伙伴,希望咱们都能进东华,一起做同学!加油鸭!!!
(ps:别忙着做题忘了看topic!>_<)