C語言實(shí)現(xiàn)24點(diǎn)游戲源代碼
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)24點(diǎn)游戲的具體代碼,供大家參考,具體內(nèi)容如下
參考文章:C語言實(shí)現(xiàn)經(jīng)典24點(diǎn)算法
將算法實(shí)現(xiàn)改成C語言,并可在linux服務(wù)器上運(yùn)行。同時(shí)修改為可顯示所有結(jié)果。 
注:如果傳參重復(fù),如4,4,7,7這樣,會(huì)回顯重復(fù)結(jié)果,暫無法清除。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> 
const double PRECISION = 1E-6; 
#define COUNT 4 
const int RESULT = 24; 
#define STRLEN 50
double number[COUNT] = {0};  //這里一定要用double,
char expression[COUNT][STRLEN] = {0}; //保存表達(dá)式 
#define TRUE 1
#define FALSE 0
int cnt = 0;
void Test(int n)
{ 
 int i = 0;
 int j = 0;
 int len = 0;
 //遞歸結(jié)束 
 if(1 == n){ 
  if(number[0] == RESULT)
  { 
   // 避免輸出前后括號(hào) 
   for (i = 1; i < strlen(expression[0]) - 1; i++) 
   { 
    printf("%c", expression[0][i]); 
   } 
   printf("\n"); 
   cnt++;
   return; 
  } 
  else 
   return; 
 } 
 //遞歸過程 
 for(i=0;i<n;i++){ 
  for(j=i+1;j<n;j++){ 
   double a,b; 
   char expa[STRLEN] = {0};
   char expb[STRLEN] = {0};
   a=number[i]; 
   b=number[j]; 
   // 刪除number[j]元素,用number[n-1]填補(bǔ) 
   number[j]=number[n-1]; 
   strcpy(expa, expression[i]);
   strcpy(expb, expression[j]);
   // 刪除expression[j]元素,用expression[n-1]填補(bǔ) 
   strcpy(expression[j], expression[n-1]);
   // 加法 
   len= strlen(expression[i]);
   snprintf(expression[i], STRLEN, "(%s+%s)", expa, expb);
   number[i]=a+b; 
   Test(n-1);
   //減號(hào)有兩種情況,a-b與b-a 
   len= strlen(expression[i]);
   snprintf(expression[i], STRLEN, "(%s-%s)", expa, expb);
   number[i]=a-b; 
   Test(n-1); 
   if(a != b)
   {
    len= strlen(expression[i]);
    snprintf(expression[i], STRLEN, "(%s-%s)", expb, expa); 
    number[i]=b-a; 
    Test(n-1); 
   }
   // 乘法 
   len= strlen(expression[i]);
   snprintf(expression[i], STRLEN, "(%s*%s)", expa, expb); 
   number[i]=a*b; 
   Test(n-1); 
   //除法也有兩種情況,a/b與b/a 
   if(b!=0){ 
    len= strlen(expression[i]);
    snprintf(expression[i], STRLEN, "(%s/%s)", expa, expb);
    number[i]=a/b; 
    Test(n-1);
   } 
   if((a!=0) && (a != b)){ 
    len= strlen(expression[i]);
    snprintf(expression[i], STRLEN, "(%s/%s)", expb, expa);
    number[i]=b/a; 
    Test(n-1); 
   } 
   //恢復(fù)數(shù)組 
   number[i]=a; 
   number[j]=b; 
   strcpy(expression[i], expa);
   strcpy(expression[j], expb);
  } 
 } 
 return; 
} 
int main(int argc, char **argv)
{ 
 int i = 0;
 if(5 != argc)
 {
  printf("arg err\n");
  return 0;
 }
 for(i=0;i<COUNT;i++)
 { 
  char buffer[20]; 
  number[i] = atoi(argv[i + 1]);
  strcpy(expression[i], argv[i + 1]);
 } 
 Test(COUNT);
 if(0 != cnt) 
 {
  printf("Total[%d], Success\n", cnt); 
 }
 else 
 {
  printf("Fail\n"); 
 }
 return 0;
} 
運(yùn)行結(jié)果如下:
andy@ubuntu14:~/work$ ./test 5 6 7 8 ((5+7)-8)*6 (5+7)*(8-6) 8/((7-5)/6) (6/(7-5))*8 6/((7-5)/8) (8/(7-5))*6 (6*8)/(7-5) ((5-8)+7)*6 (7-(8-5))*6 (5+7)*(8-6) (6*8)/(7-5) (5+(7-8))*6 (5-(8-7))*6 Total[13], Success andy@ubuntu14:~/work$ ./test 7 7 7 7 Fail
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C語言實(shí)現(xiàn)掃雷小游戲(擴(kuò)展版可選擇游戲難度)
欄 目:C語言
下一篇:C語言實(shí)現(xiàn)簡(jiǎn)單掃雷小程序
本文標(biāo)題:C語言實(shí)現(xiàn)24點(diǎn)游戲源代碼
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/168.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
 - 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫(kù)
 - 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
 - 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)數(shù)怎么表達(dá)
 - 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
 - 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
 - 04-02c語言沒有round函數(shù) round c語言
 - 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
 - 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
 - 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘
 


閱讀排行
- 1C語言 while語句的用法詳解
 - 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
 - 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
 - 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
 - 5c語言計(jì)算三角形面積代碼
 - 6什么是 WSH(腳本宿主)的詳細(xì)解釋
 - 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
 - 8正則表達(dá)式匹配各種特殊字符
 - 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
 - 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
 
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
 - 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
 - 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
 - 04-02c語言用函數(shù)寫分段 用c語言表示分段
 - 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
 - 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
 - 04-02c語言沒有round函數(shù) round c語言
 - 04-02c語言分段函數(shù)怎么求 用c語言求分段
 - 04-02C語言中怎么打出三角函數(shù) c語言中怎
 - 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
 
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
 - 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
 - 04-02jquery與jsp,用jquery
 - 01-10delphi制作wav文件的方法
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
 - 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
 


