研究生复试------12 学做菜

问题描述 :

涛涛立志要做新好青年,他最近在学做菜。由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上字母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种菜的数目。
  研究生复试------12 学做菜_第1张图片
看着很简单就是半天才出来-_-

#include 
#include
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!>_<)

你可能感兴趣的:(研究生复试)