C語言實(shí)現(xiàn)經(jīng)典24點(diǎn)算法-創(chuàng)新互聯(lián)

本文實(shí)例為大家分享了C語言經(jīng)典24點(diǎn)算法的具體實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下

創(chuàng)新互聯(lián)公司主營長洲網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā),長洲h5重慶小程序開發(fā)公司搭建,長洲網(wǎng)站營銷推廣歡迎長洲等地區(qū)企業(yè)咨詢

1、概述

給定4個整數(shù),其中每個數(shù)字只能使用一次;任意使用 + - * / ( ) ,構(gòu)造出一個表達(dá)式,使得最終結(jié)果為24,這就是常見的算24點(diǎn)的游戲。這方面的程序很多,一般都是窮舉求解。本文介紹一種典型的算24點(diǎn)的程序算法,并給出兩個具體的算24點(diǎn)的程序:一個是面向過程的C實(shí)現(xiàn),一個是面向?qū)ο蟮膉ava實(shí)現(xiàn)。

2、基本原理

基本原理是窮舉4個整數(shù)所有可能的表達(dá)式,然后對表達(dá)式求值。

表達(dá)式的定義: expression = (expression|number) operator (expression|number)

因?yàn)槟苁褂玫?種運(yùn)算符 + - * / 都是2元運(yùn)算符,所以本文中只考慮2元運(yùn)算符。2元運(yùn)算符接收兩個參數(shù),輸出計算結(jié)果,輸出的結(jié)果參與后續(xù)的計算。

由上所述,構(gòu)造所有可能的表達(dá)式的算法如下:

(1) 將4個整數(shù)放入數(shù)組中

(2) 在數(shù)組中取兩個數(shù)字的排列,共有 P(4,2) 種排列。對每一個排列,

(2.1) 對 + - * / 每一個運(yùn)算符,

(2.1.1) 根據(jù)此排列的兩個數(shù)字和運(yùn)算符,計算結(jié)果

(2.1.2) 改表數(shù)組:將此排列的兩個數(shù)字從數(shù)組中去除掉,將 2.1.1 計算的結(jié)果放入數(shù)組中

(2.1.3) 對新的數(shù)組,重復(fù)步驟 2

(2.1.4) 恢復(fù)數(shù)組:將此排列的兩個數(shù)字加入數(shù)組中,將 2.1.1 計算的結(jié)果從數(shù)組中去除掉

可見這是一個遞歸過程。步驟 2 就是遞歸函數(shù)。當(dāng)數(shù)組中只剩下一個數(shù)字的時候,這就是表達(dá)式的最終結(jié)果,此時遞歸結(jié)束。

在程序中,一定要注意遞歸的現(xiàn)場保護(hù)和恢復(fù),也就是遞歸調(diào)用之前與之后,現(xiàn)場狀態(tài)應(yīng)該保持一致。在上述算法中,遞歸現(xiàn)場就是指數(shù)組,2.1.2 改變數(shù)組以進(jìn)行下一層遞歸調(diào)用,2.1.3 則恢復(fù)數(shù)組,以確保當(dāng)前遞歸調(diào)用獲得下一個正確的排列。

括號 () 的作用只是改變運(yùn)算符的優(yōu)先級,也就是運(yùn)算符的計算順序。所以在以上算法中,無需考慮括號。括號只是在輸出時需加以考慮。

3、面向過程的C實(shí)現(xiàn)

這是 csdn 算法論壇前版主海星的代碼,程序非常簡練、精致:

#include  
#include  
#include  
using namespace std; 
const double PRECISION = 1E-6; 
const int COUNT_OF_NUMBER  = 4; 
const int NUMBER_TO_BE_CAL = 24; 
double number[COUNT_OF_NUMBER]; 
string expression[COUNT_OF_NUMBER]; 
bool Search(int n) 
{ 
    if (n == 1) { 
        if ( fabs(number[0] - NUMBER_TO_BE_CAL) < PRECISION ) { 
            cout << expression[0] << endl; 
            return true; 
        } else { 
            return false; 
        } 
    } 
    for (int i = 0; i < n; i++) { 
        for (int j = i + 1; j < n; j++) { 
            double a, b; 
            string expa, expb; 
            a = number[i]; 
            b = number[j]; 
            number[j] = number[n - 1]; 
            expa = expression[i]; 
            expb = expression[j]; 
            expression[j] = expression[n - 1]; 
            expression[i] = '(' + expa + '+' + expb + ')'; 
            number[i] = a + b; 
            if ( Search(n - 1) ) return true; 
            
            expression[i] = '(' + expa + '-' + expb + ')'; 
            number[i] = a - b; 
            if ( Search(n - 1) ) return true; 
            
            expression[i] = '(' + expb + '-' + expa + ')'; 
            number[i] = b - a; 
            if ( Search(n - 1) ) return true; 
                        
            expression[i] = '(' + expa + '*' + expb + ')'; 
            number[i] = a * b; 
            if ( Search(n - 1) ) return true; 
            if (b != 0) { 
                expression[i] = '(' + expa + '/' + expb + ')'; 
                number[i] = a / b; 
                if ( Search(n - 1) ) return true; 
            }  
            if (a != 0) { 
                expression[i] = '(' + expb + '/' + expa + ')'; 
                number[i] = b / a; 
                if ( Search(n - 1) ) return true; 
            } 
            number[i] = a; 
            number[j] = b; 
            expression[i] = expa; 
            expression[j] = expb; 
        } 
    } 
    return false; 
} 
void main() 
{ 
    for (int i = 0; i < COUNT_OF_NUMBER; i++) { 
        char buffer[20]; 
        int  x; 
        cin >> x; 
        number[i] = x; 
        itoa(x, buffer, 10); 
        expression[i] = buffer; 
    } 
    if ( Search(COUNT_OF_NUMBER) ) { 
        cout << "Success." << endl; 
    } else { 
        cout << "Fail." << endl; 
    }         
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁標(biāo)題:C語言實(shí)現(xiàn)經(jīng)典24點(diǎn)算法-創(chuàng)新互聯(lián)
鏈接地址:http://muchs.cn/article16/phedg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT全網(wǎng)營銷推廣、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)