習題6 9 UVA 127 紙牌遊戲

2021-07-09 22:09:27 字數 1243 閱讀 4143

一道學校oj做的題目,當時卡了兩三天。

簡單說下題意:

52疊撲克,從左到右發現乙個牌與他的前面3張或者1張 花色或者點數相同時,就把這張牌放到那上面,參與比較的只能是每一疊的第一章!

思路:我建立了vector 套了乙個stack  stack裡面放了struct,先輸入。

1.在輸入方面,最好寫個輸入函式,真的很方便,在輸入方面類似於紫書的例題6-7  uva 122,寫個輸入函式比較巧妙!

2.然後從做到右掃瞄,沒掃瞄的每乙個進行檢測,先檢測前面第三張,發現可以放,就在檢測,知道檢測第三張不行了,在檢測第一張,第一張可以在檢測第三章,,,可以用個goto或者遞迴函式。

3.最後就是輸出了,按照題目輸出即可!

**如下:

#include#include#include#include#includeusing namespace std;

const int maxn = 70;

struct puk

puk(char type,char val):type(type),val(val){}

};vector>sk;

bool read_input()

return true;

}int check_go(int pos)

if (pos>0)

if (pos <= 0)break;

}if (!cnt3 && sk[pos].top() == sk[com].top())

pos+=sum;sum=0;

while(cnt1)

if (pos > 0)

if (pos<=0)break;

}if (!cnt1 && sk[pos].top() == sk[com].top())

pos+=sum;

return pos;

}int main()

}int sum = 0;

for (int i = 0; i < 52; ++i)if (!sk[i].empty())++sum;

printf("%d %s remaining:",sum,sum == 1 ? "pile" : "piles");

for (int i = 0; i < 52; ++i)

if (!sk[i].empty())printf(" %d",(int)sk[i].size());

printf("\n");

}return 0;

}

uva127 手風琴紙牌

解法 每當輸入一張牌,就判斷能不能按照題目所給規則移動到前面,先判斷能否移到前面第三堆,不能的話,再判斷能否移到前一堆 只要讀懂了題意,就是很簡單的一道題目,一開始讀錯了題意,改了很長時間,看來讀題能力需要加強 include include include include using namesp...

UVa1637 紙牌遊戲

uva1637 紙牌遊戲 36 張牌分成 9 堆,每堆 4 張牌。每次可以拿走某兩堆頂部的牌,但需要點數相同。如果有多種拿法則等概率的隨機拿。例如,9 堆頂部的牌分別為 ks,kh,kd,9h,8s,8d,7c,7d,6h 則有 5 種拿法 ks,kh ks,kd kh,kd 8s,8d 7c,7d...

UVA1637 紙牌遊戲

36張牌分成9堆,每堆4張牌。每次可以拿走某兩堆頂部的牌,但需要點數相同。如果有 多種拿法則等概率的隨機拿。例如,9堆頂部的牌分別為ks,kh,kd,9h,8s,8d,7c,7d,6h,則有5種拿法 ks,kh ks,kd kh,kd 8s,8d 7c,7d 每種拿法的概率均為1 5。如果最後拿完所...