C语言 已知平均值生成随机数

已知平均值怎么生成随机数,正态分布和死循环都已经想到了 但效果都不大理想,有没有其他的思路

这里有个东西很矛盾,你是否知道到底要生成几个数,如果知道,那么就通过 area = average * n; 然后通过再在area的基础上生成,但是如果不知道的话就无法保证 平均数一定是他了。就要记录下每次生成的随机数,然后大致调整下一个随机数的生成,让 area -> average * n 。
或者通过平衡法来生成,程序如下



#include <stdio.h>
#include <stdlib.h>
#include<time.h>

void randEvar( int * list , int n , int evarage );
void printList(int * list , int n);

int main(){
    int list[100];
    randEvar(list,5,76);
    printList(list,5);
}


void randEvar( int * list , int n , int evarage ){
    srand((int)time(NULL));
    // 初始化列表 均为平均值
    for( int i = 0 ; i < n ; i++ ){
        list[i] = evarage;
    }
    // 迭代次数
    int flag = rand();
    // 为保证迭代次数足够 迭代次数需要大于 (n*evarage)
    while( flag < n * evarage ){
        flag = rand();
    }
    
    for( int i = 0 ; i < flag  ; i++ ){
        // 抽取两个数进行 数量 转移 
        int a = rand() % n;
        int b = rand() % n;
        list[a] ++;
        list[b] --;
    }
    
}
void printList(int * list , int n){
    for( n = n-1 ;n>=0;n-- ){
        printf("%d ",list[n]);
    }
}


生成效果如下

img