題目大意:
輸入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是...