uva 101 木塊問題

2022-08-25 00:15:14 字數 2542 閱讀 1484

題目大意:

輸入n,得到編號為0~n-1的木塊,分別擺放在順序排列編號為0~n-1的位置。現對這些木塊進行操作,操作分為四種。

1、move a onto b:把木塊a、b上的木塊放回各自的原位,再把a放到b上;

2、move a over b:把a上的木塊放回各自的原位,再把a發到含b的堆上;

3、pile a onto b:把b上的木塊放回各自的原位,再把a連同a上的木塊移到b上;

4、pile a over b:把a連同a上木塊移到含b的堆上。

當輸入quit時,結束操作並輸出0~n-1的位置上的木塊情況

sample input 

10move 9 onto 1

move 8 over 1

move 7 over 1

move 6 over 1

pile 8 over 6

pile 8 over 5

move 2 over 1

move 4 over 9

quit

sample output 

0: 0

1: 1 9 2 4

2:3: 3

4:5: 5 8 7 6

6:7:

8:9:

思路:乙個堆乙個一維陣列,整體二維陣列(不定長陣列使用stl中的vector來完成)

審題可發現move會將a上方的木塊歸位,onto會將b上方的木塊歸位

因此只需要判斷move和onto將相應的歸位操作完成後,即可直接將(a及a以上的木塊)移到(b及b以上的木塊)之上

#include#include

#include

#include

#include

using

namespace

std;

const

int maxn = 25

;void start_block(int

n);void

show_block();

void found_block(int a, int& p, int&h);

void clear(int p, int

h);void move(int a, int ha, int

b);int

n;vector

pile[maxn];

intmain()

show_block();

return 0;

}void start_block(int n)//

初始化木塊

}void found_block(int a, int& p, int& h)//

查詢a木塊的位置,以引用的形式返**用者

}void

show_block()

cout

<}

}void clear(int p, int h) //

將第p堆h高度以上的木塊歸位

pile[p].resize(h + 1);}

void move(int a, int ha, int b) //

(a及a以上的木塊(b及b以上的木塊)之上

pile[a].resize(ha);

}

問題:這裡第一次使用了cin當作while條件,以前一直用的是while(scanf)來判斷的

scanf作為返回值是返回的是正確接收的個數,而cin並不是如此

不定長陣列:vector

標頭檔案

#include

vector

vec;

迭代器:

vector

::iteratorite ite =vec.begin();

vec.push_back(

1);尾部新增

vec.pop_back(1);尾部刪除

(vs裡增加已存在空間的一半)

vec.reserve(

10);容量變大

vec.resize(

3);重新設定有效原數個數

vec.empty();

vec.at(

3);元素的引用

vec.back();最後乙個元素

#include

vec.insert(vec.begin()+2,12

); 新增元素

vec.clear();

vec.assign((vec.begin(),vec.end());

vec.erase(vec.begin(),vec.end());

vec.assign(

2,5);

迭代器失效

演算法:

#include

遍歷:for_each(vec.begin(),vec.end(),函式);

排序:sort(vec.begin(),vec.end());

#include

sort(str.begin(),str.end(),greater

());從大到小

亂序:random_shuffle(vec.begin(),vec.end());

uva101 木塊問題

木塊問題,題目 主要是對vector的應用。每個木塊堆的數目是動態變化的,vector陣列比較適用。include include include using namespace std const int maxn 30 int n vector int pile maxn 每個pile i 是乙...

例題5 2 木塊問題 UVa101

演算法 競賽入門經典 第2版 第5章c 與stl入門 例 題5 2木塊問題 uva101 感悟。2 借助書中中文才算看懂四條命令的英文表述。3 結合輸入輸出資料進行模擬,再反覆閱讀輸出部分英文描述,此題基本弄懂。輸出的是經過一系列操作後,每個位置的木塊情況。4 開始編碼。準備借助書中的不定長陣列ve...

UVA 木塊問題 101

uva 木塊問題 101,好開森好開森。雖然花了很長時間,不過能一次就ac也是蠻開心的,用c 寫效率就是不錯 疊木塊其實是乙個二維空間,每個木塊都有縱橫座標 include include includeusing namespace std block用於記錄木塊所在位置,x是位於哪一疊木塊,y是...