求大神幫助。。。
有1-120個數字,一個文本框,一個按鈕,點一次按鈕文本框中隨機生成一個數字,再點一次按鈕文本框隨機生成一個數字,以此類推。
每次點擊出來的數字都不會再次出現,即點擊120次后,所有的數字都會抽完,點擊第121次時文本框將不會產生數字或程式自動結束。
uj5u.com熱心網友回復:
1、創建一個集合2、120個數插入集合
3、取兩個1~120間的亂數,將這兩個數作為集合下標從集合中取數,并將兩個集合成員交換
4、重復執行步驟3若干次以后,就形成一個隨機排列120個數字的集合
5、每次點擊按鈕,取集合的第一個成員,然后洗掉集合的這個成員
6、當120次取數以后注意容錯
uj5u.com熱心網友回復:
隨機必然有重復,所謂“不重復的隨機”實際上是洗牌。洗牌演算法參考下面:#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
srand(time(NULL));
printf("shuffle 0..n-1 demo\n");
for (n=1;n<=5;n++) {/* 測驗1~5個元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j為n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 測驗n*2*n!次 */
for (i=0;i<n;i++) d[i]=i;/* 填寫0~n-1 */
for (i=n;i>0;i--) {/* 打亂0~n-1 */
a=i-1;b=rand()%i;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=0;i<n;i++) printf("%d",d[i]);
printf("\n");
}
}
printf("shuffle 1..n demo\n");
for (n=1;n<=5;n++) {/* 測驗1~5個元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j為n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 測驗n*2*n!次 */
for (i=1;i<=n;i++) d[i]=i;/* 填寫1~n */
for (i=n;i>1;i--) {/* 打亂1~n */
a=i;b=rand()%i+1;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=1;i<=n;i++) printf("%d",d[i]);
printf("\n");
}
}
}
uj5u.com熱心網友回復:
應該可以更簡單一點,不需要亂序,去掉3,4,5步,每次取數的時候,如果集合的count=0,就退出,如果count>0,直接隨機生成0~count-1之間的index,取這個index對應的元素,輸出以后并洗掉。
uj5u.com熱心網友回復:
專為拿分而來uj5u.com熱心網友回復:
點擊120次?我怕你手是要抽筋哦轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/51374.html
標籤:VB基礎類
