藍橋杯:VIP試題 算法訓練 找零錢

藍橋杯:VIP試題 算法訓練 找零錢

資源限制
時間限制:1.0s 內存限制:256.0MB

問題描述
  有n個人正在飯堂排隊買海北雞飯。每份海北雞飯要25元。奇怪的是,每個人手裏只有一張鈔票(每張鈔票的面值爲25、50、100元),而且飯堂阿姨一開始沒有任何零錢。請問飯堂阿姨能否給所有人找零(假設飯堂阿姨足夠聰明)
輸入格式
  第一行一個整數n,表示排隊的人數。

接下來n個整數a[1],a[2],…,a[n]。a[i]表示第i位學生手裏鈔票的價值(i越小,在隊伍裏越靠前)
  
輸出格式
  輸出YES或者NO
  
樣例輸入
4
25 25 50 50

樣例輸出
YES
樣例輸入
2
25 100

樣例輸出
NO

樣例輸入
4
25 25 50 100
樣例輸出
YES

數據規模和約定
  n不超過1000000

#include<iostream>
#include<string>
using namespace std;


int main(){
	long n; 
	int flag = 1;
	int *a = new int[1000001];
	int b[2] = {0,0}; //表示當前25元和50元的紙張數 ,b[0]:25 b[1]:50 
	cin>>n;
	for(int i = 1;i <= n;i++){
		cin>>a[i];
	}
	for(int i = 1;i <= n;i++){
		if(a[1] == 50 ||a[1] == 100){//如果第一張是50or100則無法找零 
			cout<<"NO"; 
			flag = 0;
			break; 
		} 
		/*從第i張開始 無法找零的情況
		 
		1.當前收到50元時,沒有25元找
		2.當前收到100元時:
			①沒有50元現鈔並且25元的數目少於三張
			②有50元現鈔但是沒有25元現鈔 
		
		*/
		if((a[i]==50 && b[0] == 0)||(a[i]==100 && ((b[0] < 3&&b[1]==0) || (b[1]>0 &&b[0]==0)))){
			cout<<"NO"; 
			flag = 0;
			break;
		}
		if(a[i] == 25){
			b[0]++;
			flag = 1;
		}else if(a[i] == 50){
			b[1]++;
			b[0]--;
			flag = 1;
		}else if(a[i] == 100){
			b[0]--;
			b[1]--;
			flag = 1;
		}
		 
	}
	if(flag == 1){
		cout<<"YES";
	}

	delete[] a;
	return 0;
} 

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章