您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“C語(yǔ)言怎么實(shí)現(xiàn)24點(diǎn)游戲計(jì)算器”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
24點(diǎn)游戲計(jì)算器的規(guī)則如下
24點(diǎn)是一種益智游戲,24點(diǎn)是把4個(gè)整數(shù)(一般是正整數(shù))通過(guò)加減乘除以及括號(hào)運(yùn)算,使最后的計(jì)算結(jié)果是24的一個(gè)數(shù)學(xué)游戲,24點(diǎn)可以考驗(yàn)人的智力和數(shù)學(xué)敏感性,它能在游戲中提高人們的心算能力。
24點(diǎn)通常是使用撲克牌來(lái)進(jìn)行游戲的,一副牌中抽去大小王后還剩下52張(如果初練也可只用1~10這40張牌),任意抽取4張牌(稱為牌組),用加、減、乘、除(可加括號(hào))把牌面上的數(shù)算成24。每張牌必須只能用一次,如抽出的牌是3、8、8、9,那么算式為(9-8)×8×3或3×8÷(9-8)或(9-8÷8)×3等。
1、選擇項(xiàng)目
打開(kāi)VS2019,點(diǎn)擊創(chuàng)建新項(xiàng)目-》然后選擇如下如圖所示的選項(xiàng)創(chuàng)建C語(yǔ)言項(xiàng)目
2、輸入項(xiàng)目名稱和路徑
3、創(chuàng)建頭文件Main.h、PointGame.h和源文件Main.c、PointGame.c如下所示
1、Main.h頭文件的編寫
#pragma once #include <stdio.h> #include <stdlib.h>
2、PointGame.h頭文件的編寫
#pragma once #include <stdbool.h> #include <math.h> #define PRECISION 1E-6 #define TARGET 24 #define SIZE 4 /* * 最終表達(dá)式由四個(gè)數(shù)、括號(hào)、運(yùn)算符組成,其大小不會(huì)超過(guò) * 5 * (SIZE - 1) + SIZE * 2 + 1 */ typedef struct card { double value; char expression[5 * (SIZE - 1) + SIZE * 2 + 1]; } Card, *pCard; bool game24(pCard card, int size);
3、PointGame.c源文件的編寫
#define _CRT_SECURE_NO_WARNINGS #include "Main.h" #include "PointGame.h" /* * 牌堆中計(jì)算24點(diǎn) * card 牌堆 * size 個(gè)數(shù) */ bool game24(pCard card, int size) { Card stack[3]; /* * 如果牌堆里只有一張牌,判斷是否就是需要的目標(biāo) */ if (size == 1) { if (fabs(card[0].value - TARGET) < PRECISION) { printf("%d = %s\n", TARGET, card[0].expression); return true; } else { return false; } } /* *從牌堆中任選兩張牌 */ int m, n, i, t; for (m = 0; m < size - 1; m++) { for (n = m + 1; n < size; n++) { /* * 剩余的牌放入新牌堆 */ t = 0; for (i = 0; i < size; i++) { if (i != m && i != n) { stack[t].value = card[i].value; sprintf(stack[t].expression, "%s", card[i].expression); t++; } } /* * 選中兩張牌的和放入新牌堆 */ stack[size - 2].value = card[m].value + card[n].value; sprintf(stack[size - 2].expression, "(%s + %s)", card[m].expression, card[n].expression); if (game24(stack, size - 1)) { return true; } /* * 選中兩張牌的差放入新牌堆 */ if (card[m].value > card[n].value) { stack[size - 2].value = card[m].value - card[n].value; sprintf(stack[size - 2].expression, "(%s - %s)", card[m].expression, card[n].expression); } else { stack[size - 2].value = card[n].value - card[m].value; sprintf(stack[size - 2].expression, "(%s - %s)", card[n].expression, card[m].expression); } if (game24(stack, size - 1)) { return true; } /* * 選中兩張牌的積放入新牌堆 */ stack[size - 2].value = card[m].value * card[n].value; sprintf(stack[size - 2].expression, "%s * %s", card[m].expression, card[n].expression); if (game24(stack, size - 1)) { return true; } /* * 選中兩張牌的商放入新牌堆 */ if (card[m].value != 0) { stack[size - 2].value = card[n].value / card[m].value; sprintf(stack[size - 2].expression, "%s / %s", card[n].expression, card[m].expression); if (game24(stack, size - 1)) { return true; } } if (card[n].value != 0) { stack[size - 2].value = card[m].value / card[n].value; sprintf(stack[size - 2].expression, "%s / %s", card[m].expression, card[n].expression); if (game24(stack, size - 1)) { return true; } } } } return false; }
4、Main.c源文件的編寫
#define _CRT_SECURE_NO_WARNINGS #include "Main.h" #include "PointGame.h" int main() { system("color 3E"); int i, poke; Card card[SIZE]; printf("請(qǐng)輸入4個(gè)數(shù)字 以判斷解法:"); for (i = 0; i < SIZE; i++) { scanf("%d", &poke); card[i].value = (double)poke; sprintf(card[i].expression, "%d", poke); } if (game24(card, SIZE)) { printf("Done\n"); } else { printf("No Answer\n"); } system("pause"); return 0; }
選擇生成----》生成解決方案。
結(jié)果如下
按F5調(diào)試結(jié)果如下所示
“C語(yǔ)言怎么實(shí)現(xiàn)24點(diǎn)游戲計(jì)算器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。