新建窗口,添加picture控件
創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、鹽湖網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為鹽湖等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
利用line()方法畫線
line(開始x坐標(biāo),開始y坐標(biāo))-(結(jié)束x坐標(biāo),結(jié)束y坐標(biāo)),線的顏色,畫線的方式(默認(rèn)為線,B為矩形無填充,BF為填充的矩形)
For i = 1 To 16
Picture1.Line (0, Picture1.Height / 2)-(i * (Picture1.Width / 16), 0), RGB(255, 0, 0)
Picture1.Line (0, Picture1.Height / 2)-(i * (Picture1.Width / 16), Picture1.Height), RGB(255, 0, 0)
Picture1.Line (Picture1.Width, Picture1.Height / 2)-(i * (Picture1.Width / 16), 0), RGB(0, 255, 0)
Picture1.Line (Picture1.Width, Picture1.Height / 2)-(i * (Picture1.Width / 16), Picture1.Height), RGB(0, 255, 0)
Next i
如果要在窗口上畫也可以調(diào)用窗口的line方法即form.line()
看了你說遞歸的效率低。那么你可以不用的。
給出的方法就是先生成第一個排列,然后每次調(diào)用下面的函數(shù)給出下一個排列,這樣生成的效率很高,這個函數(shù)可以內(nèi)聯(lián)。
這個是很經(jīng)典的排列組合算法?。吭诰W(wǎng)上能搜到一大堆。
大概是那種帶指向的移動的算法。我給你搜一個吧。
我找了幾個,這個是我覺得說的比較清楚的,你可以仔細(xì)參考一下,看不懂的話再搜點別的好了。。
全排列的算法跟這個不太一樣的。需要有點改動的。
至于語言的話,應(yīng)該不會有太大問題吧。。basic版的確實比較少,現(xiàn)在我也比較懶不想動手寫。。還是要靠你自己啦。
★生成排列的算法:
比如要生成5,4,3,2,1的全排列,首先找出一個最小的排列12345, 然后依次調(diào)用n!次STL算法中的next_permutation()即可輸出所有的全排列情況。所以這種算法的細(xì)節(jié)就是STL algorithm中next_permutation()的實現(xiàn)機制。詳細(xì)的實現(xiàn)代碼,大伙可以參考侯捷的《STL源代碼剖析》,在這里我只說一下我的理解:
1 首先從最尾端開始往前尋找兩個相鄰元素,令第一個元素為*i,第二個元素為*ii,且滿足*i*ii,找到這樣一組相鄰的元素后。
2 再從最尾端開始往前檢驗,找出第一個大于*i的元素,令為*k,將i,k元素對調(diào)。
3 再將ii及ii之后的所有元素顛倒排列,此即所求之"下一個"排列。
prev_permutation()算法的思路也基本相同,只不過它們尋找的"拐點"不同,在next_permutation()算法中尋找的是峰值拐點,而在prev_permutation()算法中尋找的是谷值拐點。另外,在第二步中,prev_permutation()要找的是第一個小于*i的元素而不是第一個大于*i的元素。
具體例子,有空再舉,現(xiàn)在時間太晚了:)
★生成組合的算法:
如下面截圖所示,分全組合和r-組合兩種情況。
這里有一段核心代碼:
//--------------------------------------------------------
// Generate next combination (algorithm from Rosen p. 286)
//--------------------------------------------------------
public int[] getNext () {
if (numLeft.equals (total)) {
numLeft = numLeft.subtract (BigInteger.ONE);
return a;
}
int i = r - 1;
while (a[i] == n - r + i) {
i--;
}
a[i] = a[i] + 1;
for (int j = i + 1; j r; j++) {
a[j] = a[i] + j - i;
}
numLeft = numLeft.subtract (BigInteger.ONE);
return a; //這里返回的a數(shù)組,存儲的就是下標(biāo)的排列組合。
}
到這里,也許大伙會有一個疑問,假如要求的不是數(shù)字的排列組合,而是字符或字符串的排列組合呢?怎么辦?其實很簡單,你只要拿數(shù)組的下標(biāo)來做排列組合,返回他們下標(biāo)的排列組合,然后再到原數(shù)組中讀取字符串值,就可以輸出全部的排列組合結(jié)果。
Rnd[(number)]
number
的值決定了
Rnd
生成隨機數(shù)的方式
如果
number
的值
Rnd
生成
小于
每次都使用
number
作為隨機數(shù)種子得到的相同結(jié)果。
大于
序列中的下一個隨機數(shù)。
等于
最近生成的數(shù)。
省略
序列中的下一個隨機數(shù)。
====================
先討論沒有加randomize時
X小于0
如
rnd(-1)
以-1為種的隨機數(shù)永遠(yuǎn)相同
X大于0
如
rnd(1)
系統(tǒng)會先生成隨機數(shù)列表
有N個隨機數(shù)
你每執(zhí)行一次rnd(1)就獲取列表中下一個隨機數(shù)
比如有這么個列表
程序開始時
得到0.7055475
執(zhí)行第二次rnd(1)得到0.533424
第三次0.5795186
你關(guān)閉程序重新打開
第一次得到還是0.7055475
.7055475
.533424
.5795186
.2895625
.301948
而你說的X0
X0沒差別
是錯的
Rnd(1)
Debug.Print
Rnd(-2)
和
Debug.Print
Rnd(-2)
Rnd(1)
結(jié)果是不一樣的
X等于0
最近生成的數(shù)
一般為科學(xué)型數(shù)值
這個值也是不變的
rnd(x)
省略x不寫
就和X0
效果一樣
=========================
Randomize
用
number
將
Rnd
函數(shù)的隨機數(shù)生成器初始化,該隨機數(shù)生成器給
number
一個新的種子值。如果省略
number,則用系統(tǒng)計時器返回的值作為新的種子值。
如果沒有使用
Randomize,則(無參數(shù)的)Rnd
函數(shù)使用第一次調(diào)用
Rnd
函數(shù)的種子值。
注意
若想得到重復(fù)的隨機數(shù)序列,在使用具有數(shù)值參數(shù)的
Randomize
之前直接調(diào)用具有負(fù)參數(shù)值的
Rnd。使用具有同樣
number
值的
Randomize
是不會得到重復(fù)的隨機數(shù)序列的。
一般在使用rnd獲取隨機數(shù)
都是
randomize
int(rnd*(上限-下限+1)+下限)
這2個函數(shù)的X都是省略不寫
Private Sub Command1_Click()
MsgBox CalcResult(2)
End Sub
Public Function CalcResult(X As Long) As Double
Dim dblMinLevel As Double
Dim dblItem As Double
Dim dblN As Double
Dim dblMember As Double, dblBase As Double
Dim i As Double
Dim dblResult As Double
dblMinLevel = 10 ^ (-6)
dblN = 0
Do
dblMember = X ^ dblN
dblBase = 1
i = dblN
Do While i 1
dblBase = dblBase * i
i = i - 1
Loop
dblItem = dblMember / dblBase
dblResult = dblResult + dblItem
dblN = dblN + 1
Loop While dblItem = dblMinLevel
CalcResult = dblResult
End Function
以一個項目為基礎(chǔ),在其工程上點右鍵,選添加,現(xiàn)有項,然后選擇另外兩個項目里的文件,用這種方式把所有的都添加上就行了
在你要引入的文件或文件夾上點右鍵,選包括在項目中
下次直接追問,要不我看不到
構(gòu)造Pen的時候可以指定粗細(xì),如果你指定為1,并且放大了10倍,最后就成10了,所以你指定小點就行了,比如 Dim p As New Pen(Color.Black, 0.01) 最終繪制的線的粗細(xì)不會小于1