人機猜數遊戲2

2022-05-05 07:48:07 字數 1469 閱讀 2108

將以上遊戲(91.人機猜數遊戲)雙方倒一下,請人想乙個四位的整數,計算機來猜,人給計算機提示資訊,最終看計算機用幾次猜出乙個人「想」的數。請程式設計實現。

*問題分析與演算法設計

解決這類問題時,計算機的思考過程不可能象人一樣具完備的推理能力,關鍵在於要將推理和判斷的過程變成一種機械的過程,找出相應的規則,否則計算機難以完成推理工作。

基於對問題的分析和理解,將問題進行簡化,求解分為兩個步聚來完成:首先確定四位數字的組成,然後再確定四位數字的排列順序。可以列出如下規則:

1)分別顯示四個1,四個2,......,四個0,確定四位數字的組成。

2)依次產生四位數字的全部排列(依次兩兩交換全部數字的位置)。

3)根據人輸入的正確數字及正確位置的數目,進行分別處理:

(注意此時不出現輸入的情況,因為在四個數字已經確定的情況下,若有3個位置正確,則第四個數字的位置必然也是正確的)

若輸入4:遊戲結束。

判斷本次輸入與上次輸入的差值

若差為2:說明前一次輸入的一定為0,本次輸入的為2,本次交換的兩個數字的位置是正確的,只要交換另外兩個沒有交換過的數字即可結束遊戲。

若差為-2:說明前一次輸入的一定為2,本次的一定為0。說明剛交換過的兩個數字的位置是錯誤的,只要將交換的兩個數字位置還原,並交換另外兩個沒有交換過的數字即可結束遊戲。

否則:若本次輸入的正確位置數<=上次的正確位置數

則恢復上次四位數字的排列,控制轉3)

否則:將本次輸入的正確位置數作為「上次輸入的正確位置數」,控制轉3)。

*程式說明與注釋

#include

#include

void bhdy(int s,int b);

void prt();

int a[4],flag,count;

int main()

*執行示例

假設人想的四位數是:7215

game begin

now guess your number in mind is # # # #.

no.1:your number may be:1111

*問題的進一步討論

本程式具有邏輯結構清析、演算法簡單正確的優點,但在接受人的輸入資訊時缺少必要的出錯保護功能,同時在進行第三步推理過程中沒有保留每次猜出的數字位置資訊及人輸入的回答,這樣對於每次人輸入的資訊就無法進行合法性檢查,即無法檢查人的輸入資訊是否自相矛盾;同晨也無法充分利用前面的結果。

這些缺陷是可以改進的,但最後乙個問題改進難度較大,留給大家自己去完成。

*思考題

「一條龍遊戲」。在乙個3×3的棋盤上,甲乙雙方進行對棄,雙方在棋盤上輪流放入棋子,如果一方的棋子成一直線(橫、豎或斜線),則該方贏。請編寫該遊戲程式實現人與機器的比賽。比賽結果有三種:輸、贏或平。

在程式設計過程中請首先分析比賽中怎樣才能獲勝,找出第一步走在什麼位置就最可能贏

人機猜數遊戲

1 人機猜數遊戲 由計算機 想 乙個四位數,請人猜這個四位數是多少。人輸入這個四位數後,計算機首先判斷這四個數中有幾個猜對了,並且在猜對的數字中又有幾位位置也是對的,將結果顯示出來,給人以提示,請人再猜 直到人猜出計算機所想的四位數為止。請程式設計實現該遊戲,遊戲結束時,顯示人猜乙個數用了幾次。沒想...

關於集合思想,人機猜數

這次程式設計的題目是 由計算機 想 乙個四位數,請人猜這個四位數是多少。人輸入這個四位數後,計算機首先判斷這四個數中有幾個猜對了,稱之為b,並且在猜對的數字中又有幾位位置也是對的,稱之為a,將結果顯示出來,給人以提示,請人再猜,直到人猜出計算機所想的四位數為止。請程式設計實現該遊戲,遊戲結束時,顯示...

C語言人機猜數問題

由計算機隨機產生乙個四位整數,請人猜這四位整數是多少。人輸入乙個四位數後,計算機首先判斷其中有幾位猜對了,並且對的數字中有幾位位置也正確,將結果顯示出來,給人以提示,請人再猜,直到人猜出計算機隨機產生的四位數是多少為止。需求 1.乙個判斷有幾個數字正確的函式 2.乙個判斷有幾個位置正確的函式 3.乙...