PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   高手請教VB6程式,兩個字串比較,程式碼如何作執行速度才會快 (https://www.pcdvd.com.tw/showthread.php?t=858377)

supermaxfight 2009-06-26 02:53 PM

程式人員的面試心得及基本原則裡面的
1-2+3-4+5-6+7......+n
是不是像這樣...
以1~10為例
我有試到10億...會開始明顯變慢....
再上去就要算很久

代碼:
Module Module1

    Sub Main()
        Dim i As Integer
        Dim temp As Integer
        Dim flag As Integer = 1
        Dim sum As Integer

        For i = 1 To 10
            temp = flag * i
            flag = (-1) * flag
            sum = sum + temp
        Next
        Console.WriteLine(sum)
        Console.Read()
    End Sub

End Module

songmong12 2009-06-26 06:08 PM

引用:
作者supermaxfight
程式人員的面試心得及基本原則裡面的
1-2+3-4+5-6+7......+n
是不是像這樣...
以1~10為例
我有試到10億...會開始明顯變慢....
再上去就要算很久


裡面有解答喔.....

像這樣的題目......其實是要套公式的

很早以前我覺得只要好好寫程式就好,數學還好.....

直到剛好有一天我學弟問我程式的時候.....我忽然的脫口而出一個公式....我才發現....

想要寫好程式....數學很重要啊 :think: :think: :think: :think: :think:

songmong12 2009-06-26 06:32 PM

另外講一下這個要怎麼解.....

1-2+3-4+5-6+7......+n


如果n=7

我們先拆開看.....看到

(1-2)+(3-4)+(5-6)+7

有看到了嗎?

所以是

-1 + -1 + -1 + 7

如果n為單數,出來的數一定是正的
則(1 + n) / 2

如果n為雙數,出來的數一定是負的
則(1 + n) / 2 * (-1)


轉換成程式大概是

if(n % 2 == 1)
return ( 1 + n ) / 2

if(n % 2 == 0)
return ( n / 2 ) * -1

結束.....

你到800億馬都不是問題....

不過......我已經好久沒寫程式了,所以想的久了一點,不過應該不到20分鐘

nyko 2009-06-26 06:44 PM

引用:
作者supermaxfight
程式人員的面試心得及基本原則裡面的
1-2+3-4+5-6+7......+n
是不是像這樣...
以1~10為例
我有試到10億...會開始明顯變慢....
再上去就要算很久

Module Module1

Sub Main()
Dim i As Integer
Dim temp As Integer
Dim flag As Integer = 1
Dim sum As Integer

For i = 1 To 10
temp = flag * i
flag = (-1) * flag
sum = sum + temp
Next
Console.WriteLine(sum)
Console.Read()
End Sub

End Module

公式
(上底加下底)*高/2

(1+1億)*1億/2


1+2+3+4+5+6
(1+6)*6/2

songmong12 2009-06-26 07:48 PM

引用:
作者nyko
公式
(上底加下底)*高/2

(1+1億)*1億/2


1+2+3+4+5+6
(1+6)*6/2


你題目沒有看喔.....

題目是 1-2+3-4+5......n

你這個是1+2+3+4+5+......+n的公式


剛剛本來想要試著算這樣的東西

5? = 5 * 4 * 3 * 2 * 1

請問如果是N的時候是多少?

結果.......推導不出來 :jolin: :jolin: :jolin: :jolin: :jolin: :jolin:

supermaxfight 2009-06-26 08:21 PM

千金難買早知道,萬般無奈想不到 :laugh: :stupefy:

nyko 2009-06-26 08:38 PM

啊 我0分
難怪我一個程式寫了8年以上 (最原史檔日期落在20000420)


順便問一下
如何判斷一條線有沒有在一個方形範圍內
線linex1,liney1-linex2,liney2

方形4角

A ------------ B




D ------------ C

x1,y1 A B x2,y1


x1,y2 D C x2,y2


圖已經不知畫幾張了

songmong12 2009-06-26 09:55 PM

引用:
作者nyko
啊 我0分
難怪我一個程式寫了8年以上 (最原史檔日期落在20000420)


順便問一下
如何判斷一條線有沒有在一個方形範圍內
線linex1,liney1-linex2,liney2

方形4角
0---->1
| A ------------ B
|
|
|
|
V D ------------ C
1
(x1,y1) A B (x2,y1)


(x1,y2) D C (x2,y2)


圖已經不知畫幾張了


看線的左右點的座標有沒有超過 A B C D 四個點的座標就可以了不是嗎?

if( min(x1,x2) > min(linex1,linex2) && max(x1,x2) < max(linex1,linex2))
if( min(y1,y2) > min(liney1,liney2) && max(y1,y2) < max(liney1,liney2))
return true;

else
retuen false;

應該是這樣吧.......有用到函式比對大小,

因為如果說line的起點跟終點你也有可能由右向左....
相同....方塊也是一樣,還好不是不規則的....要不然可能會難多了

死囡仔埔 2009-06-26 10:30 PM

引用:
作者songmong12
裡面有解答喔.....

像這樣的題目......其實是要套公式的

很早以前我覺得只要好好寫程式就好,數學還好.....

直到剛好有一天我學弟問我程式的時候.....我忽然的脫口而出一個公式....我才發現....

想要寫好程式....數學很重要啊 :think: :think: :think: :think: :think:

寫程式這麼久了。。。能用到公式的機會手指頭數的出來。。。

nyko 2009-06-26 11:21 PM

引用:
作者songmong12
看線的左右點的座標有沒有超過 A B C D 四個點的座標就可以了不是嗎?

if( min(x1,x2) > min(linex1,linex2) && max(x1,x2) < max(linex1,linex2))
if( min(y1,y2) > min(liney1,liney2) && max(y1,y2) < max(liney1,liney2))
return true;

else
retuen false;

應該是這樣吧.......有用到函式比對大小,

因為如果說line的起點跟終點你也有可能由右向左....
相同....方塊也是一樣,還好不是不規則的....要不然可能會難多了


先謝過

雖然看不懂那幾行程式
我只懂VB6
但你補的箭頭方向我應該懂你的意思

我的寫法是判斷LINE有無跟方框交叉
旦判斷有無交叉實在太多行程式太多狀況
才想有無短一點的判斷法


所有的時間均為GMT +8。 現在的時間是02:47 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2026。