1、魔術的猜數字游戲原理是什麼?
其實這里是利用二進百制的原理學
computer science的人應該能馬上反應出來。
因為數度字小於64=2的6次方所以只要6張卡知片表示每個數字用6個二進制就能表示。每張卡
片的第一個數表示第幾個二進制上有1而其餘全道是0.
比如:十進制4= 二進制100。此外這張卡片其餘的數用二進製表示在該回位上一定是1.2 |" q4 q
-z7 i( P: _比如37 化成二進制為答100101 = 1 + 100 + 100000= 十進制的1+4+32所以選擇對應的卡片就行了。
2、求解猜數字游戲
設所選數十位是A,個位是B,此數表達為10A+B
按它所說,最後得出的數=百10A+B-A-B=9A
因為A是1-9的一個數,所以最後得出的數一定是9,18,27,36,45,54,63,72,81中的一個,而它們對應的圖度象是相同的
每次出現的圖不同是因為你試一次以後,他會換9,18,27,36,45,54,63,72,81
這幾個數字的圖,所以導致你以為你想什麼他就顯什麼,你每次看先9是什麼樣的圖,然後點,就是9那個圖,再試1次9的圖換了,你再點,還是9那個圖
還不懂就沒辦法了
3、編寫一個猜數字游戲。用戶給出一個1到100之間的整數,程序通過提問來猜測用戶所想的數是什麼
就1個折半查找嘛。。。。
簡單寫了個,貌似不太合題意,但7步以內能猜到任何1-100的數字,因為我要求回答電腦的答案是3個,1,是,2,等,0,不是。可能不和要求,你看了後具體提下問題該怎麼問,反正我覺得這種要求3種答案的像是作弊,呵呵。因為涉及是否等於邊界的問題,50、25(75)、38(63、87)……我覺得還非得加入「等於」這個答案才解得出來。另外,我每行基本上都有tab鍵讓格式美觀的……到了網頁上貌似tab這個糾結的鍵的原因讓代碼。。。你編譯之前Cril+A全選然Alt+F8整理格式吧。C++源碼:
#include<iostream>
using namespace std;
int main()
{
int Num[100];
int i,n = 0,mid,high = 99,low = 0,flag1 = 0,flag2; //flag1代表找沒找到,flag2表示電腦問題答案的與否
int goal;
for(i = 0;i < 100;i ++)
{
Num[i] = i + 1;
}
cout<<"當電腦提問後請輸入1代表大於,2代表等於,0代表小於"<<endl;
while(!flag1 && high > low && n < 7)
{
goal = (Num[high] + Num[low]) / 2;
mid = (high + low) / 2;
cout<<"你要找的數大於"<<goal<<"么?"<<endl;
n ++;
cin>>flag2;
if(n == 7 && goal == 99 && flag2 == 1) //對100特殊處理,沒有這個if語句,當你想著100時
{ //你會輸入7個1,然後程序告訴你輸入錯誤或者在耍他。
flag1 = 2; //對應的如果連續輸入7個0的話你想著的數字絕對是
break; //小於1的,程序可以判斷,這個if只是針對100這個特殊數字
} //可能是因為你要找1-100,而建立數組是0-99的原因吧
if(flag2 == 1) //寫程序測試的時候就要注意邊界問題。
{
low = mid;
}
else if(flag2 == 0)
{
high = mid;
}
else
{
flag1 = 1;
break;
}
}
if(flag1 == 1)
{
cout<<"你的數字是"<<goal<<endl;
}
else if(flag1 == 2) //對100特殊處理的結果輸出
{
cout<<"你的數字是"<<100<<endl;
}
else
{
cout<<"你輸入錯誤或者你在耍我"<<endl;
}
return 0;
}
4、JAVAWEB猜數字游戲1到100(這是老師給的思路最好按照老師給的思路來)
public class Test {
public static void main(String[] args) {
int b = (int) (Math.random()*100 + 1);
while (true) {
try {
Scanner in=new Scanner(System.in);
int a=in.nextInt();
if(a < 1 || a > 100) {
System.out.println("范圍不合法");
} else if(a > b) {
System.out.println(a + "太大");
} else if (a < b) {
System.out.println(a + "太小");
} else {
System.out.println("你終於猜對了");
break;
}
} catch(Exception e) {
System.out.println("數字格式不合法");
continue;
}
}
}
}
5、文曲星中的猜數字游戲,要猜一個四位數,有什麼通用公式?
演算法:主要是復雜的邏輯判斷。基本的想法是先在六步里判斷出是哪4個數來字,然後一次性根據前面積累的B值判斷出正確的位置(如果此時有多個選擇則選擇其中之一輸出,然後根據這次輸出的反饋再判斷)。
問題的關鍵是設置什麼演算法可以再六步內判斷出這四個數字?這里給出的自是,前三步總是做固定的猜測,分別是「1,2,3,4」,「2,1,5,6」,「7,8,1,2」, 設每次得到的A反饋分別為A1,A2,A3,然後根據sum=A1+A2+A3的值來做判斷。
顯然sum>=3,因為沒被猜得只有9。如果sum為3,那麼9必然在其中,1,2必不在其中,然後可跟別根據A1,A2,A3的值來判斷3,4,5,6,7,8 (當然還要更一步判斷)。如果sum為4,這四個數必然為3,4,5,6,7,8 中的4個...當然如果你有興趣,可以對其他的試著做類似的邏輯判斷,建立在這些判斷之下然後再進一步決定下面猜測什麼。
這里給zhidao出C++實現的代碼,代碼里能看清楚具體怎麼根據sum的和來判斷,以及怎麼根據判斷結果繼續猜。如果你想讓計算機猜的是8327,那麼下面是執行的一個界面:
代碼測試例子如下:
6、怎麼破解或玩1-100猜數字游戲
1盡量縮小范圍:像我這樣你說能成功嗎?數字是50,我第一次猜是30,第二次猜31,猜中可能嗎?
2.先猜邊緣數字:先猜20以下或80以上
3.不要太離譜:跟第一條相反
祝你成功
7、看得數猜數字的游戲公式
答案如下~!
說話依次編號為S1,P1,S2。
設這兩個數為x,y,和為s,積為p。
由S1,P不知道這兩個數,所以s不可能是兩個質數相加得來的,而且s<=41,因為如果s>41,那麼P拿到41×(s-41)必定可以猜出s了(關於這一點,參考老馬的證明,這一點很巧妙,可以省不少事情)。所以和s為{11,17,23,27,29,35,37,41}之一,設這個集合為A。
1).假設和是11。
11=2+9=3+8=4+7=5+6,如果P拿到18,18=3×6=2×9,只有2+9落在集合A中,所以P可以說出P1,但是這時候S能不能說出S2呢?我們來看,如果P拿到24,24=6×4=3×8=2×12,P同樣可以說P1,因為至少有兩種情況P都可以說出P1,所以A就無法斷言S2,所以和不是11。
2).假設和是17。
17=2+15=3+14=4+13=5+12=6+11=7+10=8+9,
很明顯,由於P拿到4×13可以斷言P1,而其他情況,P都無法斷言P1,所以和是17。
3).假設和是23。
23=2+21=3+20=4+19=5+18=6+17=7+16=8+15=9+14=10+13=11+12,
咱們先考慮含有2的n次冪或者含有大質數的那些組,如果P拿到4×19或7×16都可以斷言P1,所以和不是23。
4).假設和是27。如果P拿到8×19或4×23都可以斷言P1,所以和不是27。
5).假設和是29。如果P拿到13×16或7×22都可以斷言P1,所以和不是29。
6).假設和是35。如果P拿到16×19或4×31都可以斷言P1,所以和不是35。
7).假設和是37。如果P拿到8×29或11×26都可以斷言P1,所以和不是37。
8).假設和是41。如果B拿到4×37或8×33,都可以斷言P1,所以和不是41。
綜上所述:這兩個數是4和13。
8、「猜數字」游戲如何次數最少猜對答案
?
9、有沒有類似於魔術的猜數字游戲?,別人拿出一張紙筆叫我隨便說出一個100以內的數字,他先寫了一個數字
其實這里是利用二進制的原理學
computer science的人應該能馬上反應出來。
因為數字小於64=2的6次方所以只要6張卡片表示copy每個數字用6個二進制就能表示。每張卡
片的第一個數表示第幾個二進制上有1而其餘全是0.
比如:十進制4= 二進制100。此zhidao外這張卡片其餘的數用二進製表示在該位上一定是1.2 |" q4 q
-z7 i( P: _比如37 化成二進制為100101 = 1 + 100 + 100000= 十進制的1+4+32所以選擇對應的卡片就行了。