一道學校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。如果最後拿完所...