PDA

View Full Version : Xếp vòng tròn chơi Kéo-Búa-Bao



tranvtung
31-07-2010, 17:30
Bài này có giống bài trên k?
Có n người chơi đứng thành vòng tròn và một người X đứng ở giữa vòng. Người X sẽ chọn ngẫu nhiên một người Y trong vòng tròn. Người Y sẽ ngẫu nhiên chọn một người bên trái hoặc bên phải mình để chơi trò Kéo - Búa - Bao. Người thua sẽ bị loại ra khỏi vòng tròn.

Qui tắc của trò chơi Kéo - Búa - Bao là: Kéo thắng Bao, Bao thắng Búa, Búa thắng Kéo.

Người X đứng giữa vòng tròn sẽ tiếp tục chọn ngẫu nhiên một người Y khác. Trò chơi sẽ dừng khi trên vòng tròn chỉ còn lại duy nhất một người may mắn sau cùng.

Viết chương trình mô phỏng hoạt động của trò chơi trên
Các bạn giúp mình giải bài này với,k thì chỉ mình thuật toán cũng được.Cảm ơn nhiều !

tanchusegialai
22-08-2010, 20:06
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include<vector>
using namespace std;
int Bbk()
{

int Bbk = rand() % 3 + 1;
return Bbk;//1Bua,2bao,3keo

}




int Xchonnguoi(int n)
{

int y = rand() % n;
return (y);

}
int ychonnguoi(int n,int y)
{
int yc = rand() % 2 + 1;
if(yc==1)
{
yc=y-1;
}
else
{
yc=y+1;
}
if(yc==-1)
yc=n-1;
if(yc>n-1)
yc=0;

return (yc);
}
int danhtuxi(int y, int yc)
{
int yd=Bbk();
int ycd=Bbk();
int kq=0;
while(yd==ycd)
{
yd=Bbk();
ycd=Bbk();
}
switch(yd)
{
case 1:
if (ycd==2)
return yc;
else
return y;
case 2:
if(ycd==3)
return yc;
else
return y;
case 3:
if(ycd==1)
return yc;
else
return y;
}

}

void main ()
{
srand ( time(NULL) );
int sn=0;
printf("nhap so nguoi trong vong tron:");
scanf("%d",&sn);
vector<int> vongtron;
int temp;
for(int i=0;i<sn;i++)
{
temp=i+1;
vongtron.push_back(temp);

}
int y,yc,nloai,svong;
svong=(int)vongtron.size();
int ktest;

while(svong>1)
{
y=Xchonnguoi(svong);
yc=ychonnguoi(svong,y);
nloai=danhtuxi(y,yc);
printf("Nguoi duoc x chon :%d Nguoi bi loai khoi vong:%d so nguoi con lai trong vong :%d\n",vongtron.at(y),vongtron.at(nloai),svong);
vongtron.erase(vongtron.begin()+nloai);
svong=int(vongtron.size());

}
printf("nguoi cuoi cung:%d",vongtron.at(0));
getch();




}

tanchusegialai
26-08-2010, 11:19
hôm trước viết chay lỗi nhiều quá hôm nay debug nên edit lại code

maicon
26-08-2010, 11:28
cho vào thẻ code đi bác

huugiang954
03-09-2010, 05:25
Chuẩn bị Thuật toán:

Nhập số người tham gia trò chơi với X.
Tiếp theo tạo hàm random ra Kéo- Búa - Bao (trả ra 1 kết quả). (Tham số tùy ý)
Tiếp theo tạo hàm luật thắng (truyền 2 đối số, trả ra 1 kết quả).



compare_event(x, y):

Trả ra 1: X > Y. (X thắng).
Trả ra 0: X = Y. (Hòa).
Trả ra -1: X < Y. (X thua).





int x, y, $count_person;
...


while($count_person > 1){
$x = random_event();
$y = random_event();
if(compare_event(x, y) > 1)
$count_person--;
}

tranvtung
13-09-2010, 10:37
Cho mình cảm ơn tanchusegialai va huugiang954.Tại lâu nay bận k vào ddth nên k biết các bạn post bài.Thankyou so much !