日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

pta数据结构 彩虹瓶(c++实现)(详解)

發布時間:2023/12/4 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pta数据结构 彩虹瓶(c++实现)(详解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單了解一下c++:
一:

#include<iostream> //頭文件,給予使用部分功能的權限 using namespace std; //為了解決命名沖突的問題而引入的概念 int main() //main函數,每一個C++程序都需要有一個main函數 {cout<<"Hello World"<<endl; //輸出Hello World 并轉到下一行system("pause"); //命令系統在進行到這一步操作時暫停 return 0; //因為該main函數是以int類型定義的,所以需要給予一個返回值,該處的返回值為 0 }

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 只箱子,工人就又要憤怒了……

本題就請你判斷一下,工廠的發貨順序能否讓工人順利完成任務。
輸入格式:

輸入首先在第一行給出 3 個正整數,分別是彩虹瓶的顏色數量 N(1<N≤10?3??)、臨時貨架的容量 M(<N)、以及需要判斷的發貨順序的數量 K。隨后 K 行,每行給出 N 個數字,是 1 到N 的一個排列,對應工廠的發貨順序。一行中的數字都以空格分隔。

輸出格式:

對每個發貨順序,如果工人可以愉快完工,就在一行中輸出 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來標識匹配不成功的情況:

  • 當push到棧里的數超過了序列長度,即如果序列長度為7,那么你只能將1~7push進棧。
  • stack的size超過了限制。
  • 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的pta数据结构 彩虹瓶(c++实现)(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。