雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語言 >

C語言實(shí)現(xiàn)24點(diǎn)游戲源代碼

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(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

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有