一.前言
前言如上
二.内容
#include<stdio.h>
#define N 1000000
typedef struct {
int value_25;//25元纸币数目
int value_50;//50元纸币数目
int value_100;//100元纸币数目
}Aunt;
int main(){
Aunt aunt;//一位打饭阿姨
int stu[N];//排队学生
int n;//目前排队的学生的数目
int i;//循环变量
int requiredChange=0;//要找的零钱
int totalChange=0;//饭堂阿姨现存的总零钱
int flag=1;//标志位,0为不能给所有人找零,1为可以给所有人找零
int j;//循环变量
int k;
int temp;
//饭堂阿姨一开始没有任何零钱
aunt.value_100=0;
aunt.value_50=0;
aunt.value_25=0;
scanf("%d",&n);
//学生开始排队
for(i=0;i<n;i++){
scanf("%d",&stu[i]);
}
//先给学生排个序,选择法排序,从小到大
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(stu[j]<stu[k]){
k=j;
}
}
if(k!=i){
temp=stu[k];
stu[k]=stu[i];
stu[i]=temp;
}
}
//学生们开始打饭
for(i=0;i<n;i++){
totalChange=aunt.value_100*100+aunt.value_50*50+aunt.value_25*50;
requiredChange=stu[i]-25;
if(requiredChange<=totalChange) {//可以找零
//饭堂阿姨开始找零
if(requiredChange==75){//学生手持100大钞
aunt.value_100++;
if((aunt.value_50-1)>=0){//找得开
aunt.value_50--;
}
else{//找不开
flag=0;
break;
}
if((aunt.value_25-1)>=0){//找得开
aunt.value_25--;
}
else{//找不开
flag=0;
break;
}
}
else if(requiredChange==25){//学生手持50大钞
aunt.value_50++;
if((aunt.value_25-1)>=0){//找得开
aunt.value_25--;
}
else{//找不开
flag=0;
break;
}
}
else{//学生手持25大钞
aunt.value_25++;
}
}
else{//不可以找零
flag=0;
break;
}
}
if(flag==1){
printf("YES");
}
else{
printf("NO");
}
return 0;
}