C語言生成n個亂數,亂數范圍為-1到1,然后n為自己輸入的值,使得亂數合為1,求問各位大佬
uj5u.com熱心網友回復:
亂數保留2位小數uj5u.com熱心網友回復:
直接生成不太好弄,可以先生成n-1個相加為0的亂數,然后最后一個數固定為1。uj5u.com熱心網友回復:
for example先以總和為基數取亂數,每生成一個亂數,再以總和減去該亂數為基數生成下一個亂數,一直取滿n-1個,最后一個用剩余的總和即可。
for example
int n;
scanf(“%d”, &n);
double *d = (double*)malloc(sizeof(double)*n);
srand(time(NULL));
int s = 100, t=0;
for (int i=0; i<n-1; i++) {
while(1) {
t = rand()%(2*s+1) - s;//生成[-s,s]亂數
if(s-t<=100) break;
}
d[i] = t/100.0; //生成[-1,1]亂數
s -= t; //每次生成亂數后修改總和
}
double[n-1]=s/100.0; //最后一個
uj5u.com熱心網友回復:
while(1) {t = rand()%(2*s+1) - s;//生成[-s,s]亂數
if(s-t<=100) break;
}
要保證s-t 結果小于等于100
從前面的 亂數范圍都手腳比較方便
還能把回圈去掉
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/103042.html
標籤:C語言
上一篇:求助大神,補充代碼c++
