1. 程式人生 > >C語言實現簡單24點遊戲

C語言實現簡單24點遊戲

     參考了很多網上的程式,簡單實現了基本功能

程式原始碼:

//##賀雪 軟工1502班  1508010208


#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int chu(int p,int q)   //除法運算
{
	if(p%q==0)
		return p/q;
	else
		return 111111; 
}



int fun(int i,int j,int c)    //c(區域性變數)選擇運算子,i,j為運算數字
{
	int s;
	switch(c)
	{
	case 1:  s=i+j;break;
	case 2:  s=i-j;break;
	case 3:  s=i*j;break;
	case 4:  s=chu(i,j);break;
	}
	return s;
}


void print(int c)     //c(區域性變數)選擇輸出運算子
{
	if(c==1)printf("+");
	else if(c==2)printf("-");
	else if(c==3)printf("*");
	else printf("/");
}


int main()
{
	int f[4];//四個1-13的數
	int i,j,m,n;
	int a,b,c;//符號
	int d1,d2,d3; //每步的結果
	srand(time(NULL));   //隨機生成四個數字(四張撲克牌)
	for(int w=0;w<4;w++)  
	{
		f[w]=rand()%13+1;    //生成隨機數範圍在1~13
	}
	for(w=0;w<4;w++)
	{
		printf("%d ",f[w]);
	}
	printf("\n");
	for(i=0;i<4;i++)
		for(j=0;j<4;j++)
			if(j!=i)
				for(m=0;m<4;m++)
					if(m!=i&&m!=j)
						for(n=0;n<4;n++)
							if(n!=i&&n!=j&&n!=m)            //四個數字的位置不可重複且多重可能置換位置運算
								for(a=1;a<5;a++)        
									for(b=1;b<5;b++)
										for(c=1;c<5;c++)       //選擇四個數字中間的三個運算子,皆有四種可能
										{                             //避免了對括號的思考,轉化為二元運算
											d1=fun(f[i],f[j],a);     
											d2=fun(d1,f[m],b);      //用前兩個數字的運算結果代替
											d3=fun(d2,f[n],c);     //同理,兩兩運算,遞迴過程
											if(d3==24)
											{
												printf("%d",f[i]);
												print(a);
												printf("%d",f[j]);
												print(b);
												printf("%d",f[m]);
												print(c);
												printf("%d=24\n",f[n]);
											}
										}
										return 0;
}

執行結果如下:

      運算結果無法等於24:    執行結果等於24時,輸出所有表示式:  

做這次的程式,有很多的漏洞,一開始想法侷限在窮舉法中,列出了所有的可能性,一一比較輸出,毫無演算法可言,後來在網上查詢資料,看到了遞迴的方法,但是好多的for迴圈一時間很難讀懂,在程式的思維方法上無法理解,學習了很久才看懂了for語句的巢狀以及迴圈變數的範圍設定的意義,雖然這次在程式設計和思維創新上收穫不大,但是通過對這個演算法的理解,對for迴圈巢狀的應用和題目的邏輯思考有了很深的體會和學習。

    這次只完成了基本的要求,對於提高要求,會繼續查詢相關資料,學習完成。

相關推薦

C語言實現簡單24遊戲

     參考了很多網上的程式,簡單實現了基本功能 程式原始碼: //##賀雪 軟工1502班 1508010208 #include<stdio.h> #include<time.h> #include<stdlib.h> in

C語言實現簡單的三子棋小遊戲

函式實現的基本功能: 1.初始化棋盤:用空字元初始化 2.列印棋盤:控制列印九宮格來表示棋盤 3.玩家下棋:用P表示玩家的棋子 4.電腦隨機下棋:隨機生成座標,用0表示玩家的棋子 5.判斷輸贏:玩家贏,電腦贏,平局,繼續遊戲四種情況 多檔案實現: 測試部分test.

C語言實現簡單 三子棋(井字棋)小遊戲

函式頭 放在標頭檔案裡 #ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #inc

C語言實現簡單的三子棋小遊戲

程式思想: 用一個字元陣列來定義一個三子棋的棋盤,然後對棋盤進行初始化,初始化為 空格;然後佈置程式的框架: 1.初始化棋盤 2.打印出棋盤,第一次顯示為空棋盤 3.提示玩家落子,並檢查遊戲是否結束(玩家落子可能導致遊戲直接結束) 4.讓電腦隨機落子,並檢查遊戲是否結束 5.迴圈執行第二步

C語言實現簡單的猜數字遊戲

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> int Menu() { printf("###############

C語言實現簡單的記憶力測試遊戲

一個簡單的記憶測試遊戲! printf("\n記住螢幕上出現的一串數.請仔細看,數字只出現一定時間."); printf("\n之後數字會消失,你要輸入相同的數字.\n");printf("\n祝你好運!\n\n是否要開始遊戲(是-Y,否-N) 猜數成功後,難度會上升~~~

windows網絡編程-C語言實現簡單的UDP協議聊天

無連接 ipv4地址 ast 電腦 tdi data rcp proto 生生   與TCP協議下編寫服務端程序代碼類似,但因為是無連接的形式,所以不需要監聽。   這次,我用了一點不同的想法:我建立一個服務端,用了兩個端口和兩個套接字,把服務端作為一個數據轉發的中轉站,

c語言實現簡單web服務器

tps gate choices found lte expect inf tro condition 1http簡單介紹http超文本傳輸協議:host主機地址:port端口/urlhost會被DNS服務器 解析成IP地址,所以有時候可以直接用域名,http默認訪問80端

C語言實現簡易2048小遊戲

blog 而在 而是 null 移動 是我 我們 空指針 主體 一直很喜歡玩這個小遊戲,簡單的遊戲中包含運氣與思考與策略,喜歡這種簡約又不失內涵的遊戲風格。於是萌生了用C語言實現一下的想法。 具體代碼是模仿這個:https://www.cnblogs.com/judgeyo

C語言實現的三子棋遊戲

oid operation endif while oar ini line 重新 被占用 頭文件 #ifndef __game_h__ #define __game_h__ #include <stdio.h> #include <stdlib.h>

C語言實現打飛機簡易遊戲(半完成版)

打飛機簡易遊戲(半完成版),如圖。 感謝 童晶 老師的教程,連結地址:http://study.163.com/forum/detail/1003961010.htm 未完成內容:①邊框繪製 ②多個敵機 ③敵機子彈 ④戰機生命 等等。 以下是程式碼。(在帶c99標準的codeblock

c語言實現 **三子棋小遊戲**

| 備註都寫在程式碼中 標頭檔案 game.h #ifndef __GAME_H_ #define __GAME_H_ #define ROW 3 #define COL 3 #define _CRT_SECURE_NO_WARNINGS #include&

c語言實現簡易三子棋遊戲

遊戲整體思路: 建立並輸出棋盤; 玩家落子並判定輸贏; 電腦落子並判定輸贏; 若無人勝則繼續2 ,3步驟直至棋盤滿。 下面是實現程式碼: //game.h #ifndef __GAME_H__ #define __GAME_H__ #include<

C語言實現簡單的三子棋

思路整理: 1.初始化一個二維陣列 2.列印選單並提示玩家進行選擇,獲取玩家的選擇,確定是否開始遊戲 3. 列印棋盤 4. 提示玩家輸入子想要落子的座標,對玩家的輸入進行判斷: <1>(判斷輸入是否合法以及此位置是否為空)並作出相應提示 <2&

C語言實現簡單的雙向迴圈連結串列

其實連結串列很簡單,跟著我的腳步走,基本是這篇部落格看完,你也就能實現簡單的連結串列操作了 陣列、連結串列是最常見的重要的資料結構,所以掌握連結串列也是很重要的咯。 一般連結串列的操作無外乎增刪改查。 今天就簡單的實現一下雙向迴圈連結串列的增刪 1. 連結串列的

C語言實現簡單的資料結構迷宮實驗

分析:迷宮實驗主要有兩部分操作,其一是對迷宮的生成,其二是尋路使用棧的操作。 步驟: 一、.h檔案 1、首先是迷宮的生成,可以使用隨機數種子生成,但主要邏輯部分並不在此,所以在這裡直接寫死,固定下來。 定義一個座標型別的結構體,和二維陣列迷宮: typedef

[原始碼和文件分享]基於C語言實現的勇闖迷宮遊戲

1 專案簡介 迷宮只有兩個門,一個門叫入口,另一個門叫出口。一個騎士騎馬從入口進入迷宮,迷宮設定很多障礙,騎士需要在迷宮中尋找通路以到達出口。 2 專案功能要求 迷宮問題的求解過程可以採用回溯法即在一定的約束條件下試探地搜尋前進,若前進中受阻,則及時回頭糾正錯誤另擇通路繼續搜尋的方法。從

C語言實現簡單的氣泡排序

用C實現氣泡排序       常用的排序方法有氣泡排序法,選擇排序法,插入排序法以及希爾排序法等。本文著重講解如何利用C程式碼,實現氣泡排序。       首先,要了解什麼是氣泡排序。氣泡排序是常用的一種排序方法,其基本方法就是逐次比較。即一次比較兩個數,若它們的順序錯誤,

C語言實現簡單的註冊、登入、退出

剛開始學習C語言的時候,用來練習用的,現在分享給大家,希望大家能夠喜歡。 希望能和大家共同學習C語言及c++,有不足的地方,請多多指點。 利用if——else語句實現簡單的註冊、登入、退出。 #i

C語言實現簡單的三子棋小程式

1 game.h中用於函式定義 #ifndef __GAME_H__ #define __GAME_H__ #include <string.h> #include <stdlib.h> #include <time.h> #incl