pta数据结构 彩虹瓶(c++实现)(详解)
簡單了解一下c++:
一:
1.iostream
用于存儲iostream類庫的 源文件 ,在這個程序中用于提供輸出這項功能。
C++/C++11中頭文件iostream定義了標準輸入/輸出流對象。包含了iostream也自動包含了ios、streambuf、istream、ostream和iosfwd
2.#include<>
頭文件,用于引用后面的<>中的文件中的代碼,在這個函數中用于提取iostream文件中的代碼,并編譯使用其輸出功能。
3.編譯指令using namespace std;
namespace是指標識符的各種可見范圍。命名空間用關鍵字namespace 來定義。命名空間是C++的一種機制,用來把單個標識符下的大量有邏輯聯系的程序實體組合到一起。此標識符作為此組群的名字。(來源百度百科)
C++標準程序庫中的所有標識符都被定義于一個名為std的namespace中。
(與#include<>概念上類似)
4.cout<<“Hello World”<<endl;
cout
iostream源文件帶來的功能,用于輸出“指定數據”到窗口中。
“Hello World”
這就是“指定數據”
在 cout (輸出)中每一個不同類型的數據之間都要用 << 隔開
同時在 cin(輸入)中每一個不同類型的數據之間都要用 >> 隔開
5.system(“pause”)
用于暫停當前程序,如果沒有這段代碼,程序在運行完后就會馬上消失。
二:
棧:先進后出#include<stack> stack<int> temp; temp.pop():移除棧頂元素。 temp.push():在棧頂增加元素。 temp.empty():棧為空返回真。 temp.top():返回棧頂元素。 temp.size():返回棧中元素數目。題目:7-12 彩虹瓶 (25 分)
彩虹瓶的制作過程(并不)是這樣的:先把一大批空瓶鋪放在裝填場地上,然后按照一定的順序將每種顏色的小球均勻撒到這批瓶子里。
假設彩虹瓶里要按順序裝 N 種顏色的小球(不妨將順序就編號為 1 到 N)。現在工廠里有每種顏色的小球各一箱,工人需要一箱一箱地將小球從工廠里搬到裝填場地。如果搬來的這箱小球正好是可以裝填的顏色,就直接拆箱裝填;如果不是,就把箱子先碼放在一個臨時貨架上,碼放的方法就是一箱一箱堆上去。當一種顏色裝填完以后,先看看貨架頂端的一箱是不是下一個要裝填的顏色,如果是就取下來裝填,否則去工廠里再搬一箱過來。
如果工廠里發貨的順序比較好,工人就可以順利地完成裝填。例如要按順序裝填 7 種顏色,工廠按照 7、6、1、3、2、5、4 這個順序發貨,則工人先拿到 7、6 兩種不能裝填的顏色,將其按照 7 在下、6 在上的順序堆在貨架上;拿到 1 時可以直接裝填;拿到 3 時又得臨時碼放在 6 號顏色箱上;拿到 2 時可以直接裝填;隨后從貨架頂取下 3 進行裝填;然后拿到 5,臨時碼放到 6 上面;最后取了 4 號顏色直接裝填;剩下的工作就是順序從貨架上取下 5、6、7 依次裝填。
但如果工廠按照 3、1、5、4、2、6、7 這個順序發貨,工人就必須要憤怒地折騰貨架了,因為裝填完 2 號顏色以后,不把貨架上的多個箱子搬下來就拿不到 3 號箱,就不可能順利完成任務。
另外,貨架的容量有限,如果要堆積的貨物超過容量,工人也沒辦法順利完成任務。例如工廠按照 7、6、5、4、3、2、1 這個順序發貨,如果貨架夠高,能碼放 6 只箱子,那還是可以順利完工的;但如果貨架只能碼放 5 只箱子,工人就又要憤怒了……
本題就請你判斷一下,工廠的發貨順序能否讓工人順利完成任務。
輸入格式:
輸出格式:
對每個發貨順序,如果工人可以愉快完工,就在一行中輸出 YES;否則輸出 NO。輸入樣例:
7 5 3 7 6 1 3 2 5 4 3 1 5 4 2 6 7 7 6 5 4 3 2 1輸出樣例:
YES NO NO代碼:
#include<cstdio> //cstdio是將stdio.h的內容用C++頭文件的形式表示出來 #include<iostream> //頭文件,給予使用部分功能的權限 #include<stack> using namespace std; //為了解決命名沖突的問題而引入的概念 int main() {int n,m,k;//n顏色數量,m貨架容量,k需要判斷的發貨順序的數量 int a;//工廠的發貨順序 scanf("%d %d %d\n",&n,&m,&k);while(k--){stack<int>s;//申請一個棧int c=1;//第一個需要的編號 int flag=0;for(int i=0;i<n;i++){scanf("%d",&a);//挨個讀入if(a==c)//如果剛來的這個和需要的這個一樣 {c++;//裝進去,需要的加1 while(s.size())/*s.size()返回棧中元素數目 如果不為空的話 */{if(s.top()==c)//判斷棧頂元素與需要的那個是不是一致的 {s.pop();//是就出棧 c++;//需要的下一個加1 }else break;}}else//如果和需要的不一致 {s.push(a);//進棧 if(s.size()>m) flag=1;//如果棧的容量超出了給定范圍,就標記一下 //注意不能break,不然棧里面就有上一個的殘留 }} if(flag||c<n) printf("NO\n");//判斷是不是沒達到要求 else printf("YES\n");}return 0; }思路是模擬棧的運行。每讀一個數,就將他和當前棧頂的數比較,如果不相等,就從1開始往棧里push,直到當前棧頂元素和當前所讀元素相等,相當于當前所讀元素匹配成功。匹配成功后,就彈出棧頂元素,讀下一個元素。
設置一個flag來標識匹配不成功的情況:
總結
以上是生活随笔為你收集整理的pta数据结构 彩虹瓶(c++实现)(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一天不吃饭只喝水能瘦多少斤
- 下一篇: c++中计算2得n次方_七上,一元一次方