摘要:解題思路就是選擇兩個(gè)數(shù)字,一個(gè)最小值和一個(gè)最大值,取這兩者的平均值作為判斷。判斷的數(shù)字小了,就減小最大值。用遞歸使取值的范圍逐漸縮小。當(dāng)取值等于目標(biāo)值的時(shí)候,打印這個(gè)值,并結(jié)束遞歸。
解題思路就是選擇兩個(gè)數(shù)字,一個(gè)最小值和一個(gè)最大值,取這兩者的平均值作為判斷。
判斷的數(shù)字大了,就增大最小值。
判斷的數(shù)字小了,就減小最大值。
用遞歸使取值的范圍逐漸縮小。
當(dāng)取值等于目標(biāo)值的時(shí)候,打印這個(gè)值,并結(jié)束遞歸。
這里遇到了一個(gè)問(wèn)題,比如當(dāng)用戶輸入了一個(gè)數(shù)字1,代碼中的number會(huì)變得足夠小,取值范圍最后會(huì)有 1-4 和 1-3,這兩個(gè)范圍的平均值向下取整后,都為2,最后發(fā)現(xiàn)會(huì)重復(fù)打印兩個(gè)數(shù)字2。
所以我加入了一個(gè)數(shù)組,將猜過(guò)的數(shù)字放入數(shù)組中,如果當(dāng)前猜的數(shù)字已存在數(shù)組中,就再用一個(gè)stamp做判斷,看上一次是猜大了還是猜小了,猜小了就加一,猜大了就減一。
// 初始值 var number = 100 // 猜數(shù)次數(shù) var time = 0 // 每次猜的數(shù)字 var temp = null // 標(biāo)記上一次是猜大了還是猜小了 var stamp = null // 存放猜過(guò)的數(shù)字 var array = [] function guess (target, min = 1, max = 100) { // 判斷給的數(shù)字是否在范圍內(nèi) if (target > 100 || target < 1) { console.log("要1到100的數(shù)字哦!") return } temp = Math.floor((max + min) / 2) temp = tempChange(temp) // 將猜過(guò)的數(shù)字放進(jìn)一個(gè)數(shù)組里 array.push(temp) number = Math.floor(number / 2) if (number === 0) number = 1 if (target === temp) { console.log("第" + ++time + "次,我猜是" + temp + "%c bingo!", "color: green") return } else if (target >= min + number) { console.log("第" + ++time + "次,我猜是" + temp + "%c 小了!", "color: red") // 猜小了,標(biāo)記為true stamp = true guess(target, min + number, max) } else if (target <= max - number) { console.log("第" + ++time + "次,我猜是" + temp + "%c 大了!", "color: red") // 猜大了,標(biāo)記為false stamp = false guess(target, min, max - number) } } // 判斷這個(gè)數(shù)字是否已經(jīng)猜過(guò) function tempChange (temp) { if (array.indexOf(temp) !== -1) { if (stamp) { temp++ } else { temp-- } } return temp } guess(9)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99952.html
C語(yǔ)言程序設(shè)計(jì) 所有代碼都展示main函數(shù)里面的代碼 計(jì)算機(jī)的思維 輾轉(zhuǎn)相除法 int u = 32;int v = 32;//如果v=0,計(jì)算結(jié)束,u就是最大公約數(shù)//v!=0計(jì)算u/v的余數(shù),讓u=v v=余數(shù)while(v!+0){ int temp = u%v; u = v; v = temp;}printf(%d,u); 從計(jì)算機(jī)到程序再到算法 計(jì)算機(jī)的思維和優(yōu)勢(shì)是把所有可能...
摘要:而且我們一直在講的,也可以用中文來(lái)編程。帶來(lái)的一個(gè)額外功能就是,你可以使用中文作為變量名。另外如果在代碼里寫中文,別忘了在開頭加上或的聲明。 現(xiàn)代計(jì)算機(jī)和編程的起源和推動(dòng)力量主要源自美國(guó),再加上26個(gè)字母很便于表示(算上大小寫,6位bit就夠了),因此英語(yǔ)一直是編程領(lǐng)域的不二之選。但這就給部分非英語(yǔ)國(guó)家的編程學(xué)習(xí)者帶來(lái)一些困擾。以至于有些人還沒開始學(xué),就擔(dān)心自己的英語(yǔ)問(wèn)題。這完全沒必要...
摘要:猜對(duì)則本次猜測(cè)免費(fèi),猜錯(cuò)則本次猜測(cè)需要花費(fèi)和數(shù)字等額的金錢。其實(shí)這題的英文表述有些問(wèn)題,確切來(lái)說(shuō),在所有能夠確保找到目標(biāo)值的方法中,找到花費(fèi)金錢最少的哪種。當(dāng)?shù)扔跁r(shí),即從中找到目標(biāo)數(shù)字,確保找到一個(gè)數(shù)字至少需要多少錢。 題目要求 We are playing the Guess Game. The game is as follows: I pick a number from 1 ...
摘要:謝耳朵愛玩的游戲,石頭剪子布的升級(jí)版。擁有最高點(diǎn)數(shù)的玩家獲勝,其點(diǎn)數(shù)必須等于或低于點(diǎn)。在編寫這個(gè)游戲的過(guò)程中第一次引入了類概念。宇宙空間中微小的摩擦力和隕石撞擊后受到的力,都要考慮并且編入游戲中。 人人都應(yīng)該學(xué)編程嗎?隨著每個(gè)人的工作與電腦連結(jié)愈發(fā)緊密,也許這是真的。 我是游戲設(shè)計(jì)師,在分工細(xì)致的國(guó)內(nèi)網(wǎng)游業(yè)界,不需要研發(fā)或美術(shù)背景也能擔(dān)當(dāng)游戲設(shè)計(jì)重任的角色多了起來(lái)。有時(shí)候他們甚至只需...
閱讀 1249·2021-11-15 11:37
閱讀 2260·2021-09-30 09:55
閱讀 4534·2021-09-22 15:51
閱讀 3756·2021-09-22 15:46
閱讀 2780·2019-08-30 15:52
閱讀 436·2019-08-29 16:20
閱讀 2901·2019-08-29 15:12
閱讀 1157·2019-08-26 18:27