最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)經(jīng)典24點(diǎn)紙牌益智游戲

 更新時(shí)間:2020年03月06日 11:38:12   作者:晴水如藍(lán)  
這篇文章主要介紹了C++實(shí)現(xiàn)經(jīng)典24點(diǎn)紙牌益智游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了經(jīng)典24點(diǎn)紙牌益智游戲的具體實(shí)現(xiàn)方法,供大家參考,具體內(nèi)容如下

一.實(shí)驗(yàn)內(nèi)容

24點(diǎn)游戲是經(jīng)典的紙牌益智游戲。

常見游戲規(guī)則:

從撲克中每次取出4張牌。使用加減乘除,第一個(gè)能得出24者為贏。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求編程解決24點(diǎn)游戲。
基本要求: 隨機(jī)生成4個(gè)代表撲克牌牌面的數(shù)字字母,程序自動(dòng)列出所有可能算出24的表達(dá)式,用擅長(zhǎng)的語言(C/C++/Java或其他均可)實(shí)現(xiàn)程序解決問題。
1.程序風(fēng)格良好(使用自定義注釋模板)
2.列出表達(dá)式無重復(fù)。

二.算法設(shè)計(jì)思路

算法描述:

1.通過rand()函數(shù)生成4個(gè)隨機(jī)數(shù)
2.通過F()函數(shù)進(jìn)行遞歸調(diào)用
3.首先將數(shù)組A中的兩個(gè)數(shù)進(jìn)行運(yùn)算,得到結(jié)果,然后通過遞歸調(diào)用將結(jié)果與下一個(gè)數(shù)字運(yùn)算,得到結(jié)果再通過遞歸調(diào)用,與最后一個(gè)數(shù)進(jìn)行運(yùn)算
4.遞歸過程中,判斷是否(n==1&&A[0]==24),滿足條件則輸出結(jié)果。最后通過count最終知道有多少種解法

三.代碼實(shí)現(xiàn)

#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<ctime>
using namespace std;

int n=4; //三次運(yùn)算標(biāo)記值 
double A[4]={0}; //存儲(chǔ)4個(gè)數(shù)字
char oper[4]={'+','-','*','/'}; //存儲(chǔ)運(yùn)算符
string B[4];
int count=0;
int F(int n){
 //判斷是否已完成三次運(yùn)算 
 if(n==1){
 if(A[0]==24) //判斷結(jié)果是否為24 
 { 
  cout<<B[0]<<endl; //如果是則輸出B[0]里蘊(yùn)含的整個(gè)表達(dá)式 
  count++;
 } 
 }

 //遞歸實(shí)現(xiàn) 
 //從數(shù)組中任意取出兩個(gè)數(shù)的組合 
 for(int i=0;i<n;i++){
 for(int j=i+1;j<n;j++){
  double a,b;
  string x,y;
  a=A[i];
  b=A[j];
  A[j]=A[n-1]; //將最后一位數(shù)賦給A[j]  
  x=B[i];
  y=B[j];
  B[j]=B[n-1]; //最后一位數(shù)字放入B[j]中 
  
  //加法 
  A[i]=a+b; //第一個(gè)空間保存前兩個(gè)數(shù)的運(yùn)算結(jié)果 
  B[i]='('+x+'+'+y+')'; //將運(yùn)算結(jié)果存入數(shù)組B中 
  F(n-1);

  //減法
  //考慮兩種情況:1. a-b 2. b-a 
  A[i]=a-b;
  B[i]='('+x+'-'+y+')';
  F(n-1);
  A[i]=b-a;
  B[i]='('+y+'-'+x+')';
  F(n-1);

  //乘法 
  A[i]=a*b;
  B[i]='('+x+'*'+y+')';
  F(n-1);

  //除法
  //考慮兩種情況:1. a/b 2. b/a 同時(shí)需要判斷分母不為零 
  if(b!=0){
  A[i]=a/b;
  B[i]='('+x+'/'+y+')';
  F(n-1);
  }

  if(a!=0){
  A[i]=b/a;
  B[i]='('+y+'/'+x+')';
  F(n-1);
  }

  //當(dāng)以上四則運(yùn)算的結(jié)果都不能滿足條件時(shí)
  //進(jìn)入下一個(gè)for循環(huán)之前, 需要將之前的i和j上的值都找回,即賦值 
  A[i]=a;
  A[j]=b;
  B[i]=x;
  B[j]=y;
 }
 }
}

class RandNum{
public:
  RandNum(){
    srand(time(0));
  }
  double get(int begin = 0, int end = 1){
    return rand()%(end-begin+1)+begin;
  }
}; 

int main(void)
{
 RandNum r;
  for (int i = 0; i < 4; i++) { //生成4個(gè)1~13之間的數(shù)字 
    A[i]=r.get(1,13);  //將生成的數(shù)字存入數(shù)組A中 
 cout<<A[i]<<" "; 
  }
  cout<<endl;
 for(int i=0;i<4;i++){
 if(A[i]==1) B[i]='A';
 else if(A[i]==10) B[i]="10"; 
 else if(A[i]==11) B[i]='J';
 else if(A[i]==12) B[i]='Q';
 else if(A[i]==13) B[i]='K';
 else B[i]='0'+A[i];
 } 
 F(n);
 cout<<endl<<"總共有 "<<count<<" 種解法"<<endl; 
 return 0;
}

四.測(cè)試及運(yùn)行結(jié)果

五.經(jīng)驗(yàn)歸納

這次的程序設(shè)計(jì)采用了遞歸調(diào)用的方式,使得問題一步步化簡(jiǎn),即每次都是兩個(gè)數(shù)字進(jìn)行運(yùn)算,得到結(jié)果,結(jié)果再與下一個(gè)數(shù)字進(jìn)行運(yùn)算,直到滿足終止條件,結(jié)束遞歸。遞歸這種思想雖然很好寫出,但難以理解,尤其是對(duì)一些大型的算法。通過這次的程序設(shè)計(jì),我對(duì)遞歸有了更深的認(rèn)識(shí)。雖然遞歸的執(zhí)行效率很低,但是有一些問題必須使用遞歸解決,因此我會(huì)在以后的程序設(shè)計(jì)中經(jīng)常用到遞歸,提高對(duì)于遞歸的理解能力。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言中0、‘\0‘、‘0‘、NULL以及類型轉(zhuǎn)化

    C語言中0、‘\0‘、‘0‘、NULL以及類型轉(zhuǎn)化

    在C語言中, NULL和0的值都是一樣的,但是為了目的和用途及容易識(shí)別的原因,下面這篇文章主要給大家介紹了關(guān)于C語言中0、‘\0‘、‘0‘、NULL以及類型轉(zhuǎn)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • VC實(shí)現(xiàn)A進(jìn)程窗口嵌入到B進(jìn)程窗口中顯示的方法

    VC實(shí)現(xiàn)A進(jìn)程窗口嵌入到B進(jìn)程窗口中顯示的方法

    這篇文章主要介紹了VC實(shí)現(xiàn)A進(jìn)程窗口嵌入到B進(jìn)程窗口中顯示的方法,對(duì)于理解windows程序運(yùn)行原理的進(jìn)程問題有一定的幫助,需要的朋友可以參考下
    2014-07-07
  • C++堆棧類模板實(shí)現(xiàn)代碼

    C++堆棧類模板實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C++堆棧類模板的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C語言的語法風(fēng)格與代碼書寫規(guī)范指南

    C語言的語法風(fēng)格與代碼書寫規(guī)范指南

    這篇文章主要介紹了C語言的語法風(fēng)格與代碼書寫規(guī)范指南,文中主張了一些諸如變量和結(jié)構(gòu)體的命名規(guī)范等細(xì)節(jié)方面的問題,需要的朋友可以參考下
    2016-02-02
  • 詳解C語言之文件操作下)

    詳解C語言之文件操作下)

    這篇文章主要介紹了關(guān)于C語言文件操作方法的相關(guān)資料,小編覺得這篇文章寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • opencv3/C++基于顏色的目標(biāo)跟蹤方式

    opencv3/C++基于顏色的目標(biāo)跟蹤方式

    今天小編就為大家分享一篇opencv3/C++基于顏色的目標(biāo)跟蹤方式,具有很好的參考價(jià)值,希望對(duì)的有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 解析ActiveMQ的使用說明總結(jié)

    解析ActiveMQ的使用說明總結(jié)

    本篇文章是對(duì)ActiveMQ的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    在C++編程中,位操作是基礎(chǔ)而強(qiáng)大的技術(shù),允許在二進(jìn)制級(jí)別上操作數(shù)據(jù),對(duì)性能優(yōu)化、內(nèi)存節(jié)省和底層硬件控制至關(guān)重要,文章探討了掩碼操作、字節(jié)提取與組裝等技術(shù),并介紹了bitset類模板的使用,幫助處理二進(jìn)制數(shù)據(jù),通過實(shí)例解析如何設(shè)置、清除、檢查特定位
    2024-10-10
  • C#?CLR學(xué)習(xí)?C++使用namespace實(shí)例詳解

    C#?CLR學(xué)習(xí)?C++使用namespace實(shí)例詳解

    這篇文章主要為大家介紹了C#?CLR學(xué)習(xí)?C++使用namespace實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C++ 類this及返回自身對(duì)象的引用方式

    C++ 類this及返回自身對(duì)象的引用方式

    這篇文章主要介紹了C++ 類this及返回自身對(duì)象的引用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論

犍为县| 伊金霍洛旗| 阿鲁科尔沁旗| 读书| 蓬安县| 桦川县| 江山市| 揭东县| 仙桃市| 故城县| 奉化市| 漠河县| 安岳县| 同德县| 德州市| 封开县| 陇南市| 萍乡市| 桐庐县| 安图县| 阿图什市| 新安县| 浠水县| 双桥区| 泸水县| 嘉峪关市| 两当县| 保靖县| 武冈市| 丹江口市| 垦利县| 云龙县| 贵州省| 涿鹿县| 石泉县| 静安区| 安平县| 读书| 德安县| 镇雄县| 宁海县|