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:算法

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