WEB开发网
开发学院软件开发C++ C++中的23种算法 阅读

C++中的23种算法

 2012-05-29 11:10:16 来源:WEB开发网   
核心提示:default:printf("%d ", remain); break;}if(i % 13 == 0)printf("\n");}return 0;}11.赌博游戏说明一个简单的赌博游戏,游戏规则如下:玩家掷两个骰子,C++中的23种算法(8),点数为1到6,如果第一次点数和

default:

printf("%d ", remain); break;

}

if(i % 13 == 0)

printf("\n");

}

return 0;

}

11.赌博游戏

说明一个简单的赌博游戏,游戏规则如下:玩家掷两个骰子,点数为1到6,如果第一次点数

和为7或11,则玩家胜,如果点数和为2、3或12,则玩家输,如果和为其它点数,则记录第一

次的点数和,然后继续掷骰,直至点数和等于第一次掷出的点数和,则玩家胜,如果在这之前

掷出了点数和为7,则玩家输。

解法规则看来有些复杂,但是其实只要使用switch配合if条件判断来撰写即可,小心不要弄

错胜负顺序即可。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define WON 0

#define LOST 1

#define CONTINUE 2

int rollDice() {

return (rand() % 6) + (rand() % 6) + 2;

}

int main(void) {

int firstRoll = 1;

int gameStatus = CONTINUE;

int die1, die2, sumOfDice;

int firstPoint = 0;

char c;

srand(time(0));

printf("Craps赌博游戏,按Enter键开始游戏****");

while(1) {

getchar();

if(firstRoll) {

sumOfDice = rollDice();

printf("\n玩家掷出点数和:%d\n", sumOfDice);

switch(sumOfDice) {

case 7: case 11:

gameStatus = WON; break;

case 2: case 3: case 12:

gameStatus = LOST; break;

default:

firstRoll = 0;

gameStatus = CONTINUE;

firstPoint = sumOfDice;

break;

}

}

else {

sumOfDice = rollDice();

printf("\n玩家掷出点数和:%d\n", sumOfDice);

if(sumOfDice == firstPoint)

gameStatus = WON;

else if(sumOfDice == 7)

gameStatus = LOST;

}

if(gameStatus == CONTINUE)

puts("未分胜负,再掷一次****\n");

else {

if(gameStatus == WON)

puts("玩家胜");

else

puts("玩家输");

printf("再玩一次?");

scanf("%c", &c);

if(c == 'n') {

puts("游戏结束");

break;

}

firstRoll = 1;

}

}

return 0;

}

12.约瑟夫问题(Josephus

Problem)

说明据说着名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹

太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了

一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,

然后再由下一个重新报数,直到所有人都自杀身亡为止。

然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排

在第16个与第31个位置,于是逃过了这场死亡游戏。

解法约瑟夫问题可用代数分析来求解,将这个问题扩大好了,假设现在您与m个朋友不幸参

与了这个游戏,您要如何保护您与您的朋友?只要画两个圆圈就可以让自己与朋友免于死亡游

戏,这两个圆圈内圈是排列顺序,而外圈是自杀顺序,如下图所示:

使用程式来求解的话,只要将阵列当作环状来处理就可以了,在阵列中由计数1开始,每找到三

个无资料区就填入一个计数,直而计数达41为止,然后将阵列由索引1开始列出,就可以得知每

个位置的自杀顺序,这就是约瑟夫排列,41个人而报数3的约琴夫排列如下所示:

上一页  3 4 5 6 7 8 9 10 11 12 13  下一页

Tags:算法

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接