USTSU

12
返回清單 發表主題
作者: Hua
檢視: 19304|回覆: 17

more +隨機圖賞Gallery

单人房间出租 Summer/Fall 2024 - 距离CSULB 1.9mi Long Beach单人房间出租 Summer/Fall 2024 - 距离CSULB 1.9mi Long Beach
爾灣 Turtle Rock 好區雅房出租900爾灣 Turtle Rock 好區雅房出租900
灣區舊金山教車教練灣區舊金山教車教練
雅房分租日落區(sunser)及套房雅房分租日落區(sunser)及套房
Cupertino雅房出租Cupertino雅房出租
爾灣 Turtle Rock 好區雅房出租850爾灣 Turtle Rock 好區雅房出租850

智商180的數學題【 公佈解答 】

[複製連結]
chemery 發表於 2005-11-17 00:37:06 | 顯示全部樓層
To: daymare

"手算法" 是土法煉鋼啦, 方法如下:

(1) 假設此數是 x2:
     (因為題目說: 已知此數最右邊的數字是2)

     由題目中我們知道:     把最右邊的數移到最左邊會變成其值的兩倍
     所以:                       2 * ( x * 10 + 2 ) = 2 * 10 + x
     整理一下:                 19x = 16


(2) 假設此數是 xy2:

     由題目中我們知道:     把最右邊的數移到最左邊會變成其值的兩倍
     所以:                       2 * ( x * 100 + y * 10 + 2 ) = 2 * 100 + x * 10 + y
     整理一下:                 190x + 19y = 196


(3) 假設此數是 xyz2:

     所以:                      2 * ( x * 1000 + y * 100 + z * 10 + 2 ) = 2 * 1000 + x * 100 + y * 10 + z
     整理一下:                1900x + 190y + 19z = 1996

      
依此類推 ... ....

然後找各種可能組合的整數解  .... ...





====================================
發現土法煉鋼是無法解出智商 180題目 的 May
tico 發表於 2005-11-17 07:31:27 | 顯示全部樓層
Originally posted by Blueted at 11/16/05 23:35:
我也很想知道那程式是怎麼來的?

Tico, 你真的是太閒了 ^^


程式是我自己寫的啦

program
Blueted 發表於 2005-11-17 18:04:07 | 顯示全部樓層
Tico, 那你還是真的太閒了 ^^
tico 發表於 2005-11-17 22:01:48 | 顯示全部樓層
還好吧, 也不過十幾分鐘就寫完啦
daymare 發表於 2005-11-19 00:09:46 | 顯示全部樓層
Originally posted by chemery at 2005-11-17 00:37:
To: daymare

"手算法" 是土法煉鋼啦, 方法如下:

(1) 假設此數是 x2:
     (因為題目說: 已知此數最右邊的數字是2)

     由題目中我們知道:     把最右邊的數移到最左邊會變成其值的兩倍
    ...


ok了解,原來你把它們都移位了
不須要那麼麻煩ㄏㄏ

手算一分鐘就好了

2 * x2 = 2x,
2 * xy2 = 2xy
.
.
其實照你這樣寫就可以算出 MSB 和第 2LSB 了

[ Last edited by daymare on 2005-11-19 at 12:11 AM ]
net_bala 發表於 2005-11-20 04:31:37 | 顯示全部樓層
哇~ 大家似乎都是用數學方程式去解;
我數學不好, 只能用邏輯的方式去土法煉鋼,
不過我也公佈一下我的算法吧:

假設某數為XXXXXX....XXX2,
而將2移到最左邊後就會是兩倍,
也就是2XXXXX...XXX4,
那麼就能得知某數是XXXXXX...XX42,
將某數兩倍後, 就是 2XXXXX...XX84,
那就又能得知某數為XXXXXX...X842

以此類推, 就能找出一個pattern,
也就是某數的某一位數,
必定是前一位數乘以2後取"個位數",
加上前兩位數乘以2後取"十位數" (也就是0或1);

以上的pattern可以寫成: Ax = ([Ax-1] * 2 mod 10) + carry of ([Ax-2] * 2)
Ax = 某數的某一位數
[Ax-1] = 某數的某一位數的前一位數
[Ax-2] = 某數的某一位數的前兩位數

然後只要算到 Ax = 1 而且 carry = 0,
答案就出來了... ^^"
用手算是很久的 (想出pattern 加演算共花了我近三十分鐘...)
不過我也寫了個Java程式,
倒是蠻快的... ^^"

程式公佈出來, 敬請指教:


  1. public class Counter {

  2.     public static void main(String[] args) {
  3.         int m = 2, r = 4, c = 0;  //r = remainder, c = carry
  4.         String s = "";

  5.         while (true) {
  6.             r = m * 2 % 10 + c;
  7.             c = m > 4 ? 1 : 0;

  8.             s = Integer.toString(m) + s;

  9.             if (m == 1 && r == 2) {
  10.                 break;
  11.             } else {
  12.                 m = r;
  13.             }
  14.         }

  15.         System.out.println(s);
  16.     }
  17. }
複製代碼
daymare 發表於 2005-11-20 11:47:53 | 顯示全部樓層
Originally posted by net_bala at 2005-11-20 04:31:
哇~ 大家似乎都是用數學方程式去解;
我數學不好, 只能用邏輯的方式去土法煉鋼,
不過我也公佈一下我的算法吧:

假設某數為XXXXXX....XXX2,
而將2移到最左邊後就會是兩倍,
也就是2XXXXX...XXX4,
那麼就能得知某數是XXXXXX...XX42,
將某數兩倍後, 就是 2XXXXX...XX84,
那就又能得知某數為XXXXXX...X842


我就是這樣ㄚ
original:    ...xxx42  -> xx842 -> x6842
double:    ..xxx84  -> xx684 -> x3642
just add and shift, add and shift
vanceboy81 發表於 2009-5-21 12:14:35 | 顯示全部樓層
= =""
你需要登入後才可以回覆 登入 | 成為會員

本版積分規則

小黑屋|手機版|Archiver|USTSU

GMT-8, 2024-5-6 11:56 , Processed in 0.338893 second(s), 7 queries , Gzip On, APCu On.

Powered by Discuz! X3.4

© USTSU.com since 2004