c语言怎编程t分布表,用C语言实现:输入:信源符号个数r、信源的概率分布P;实验算法:1、从键盘输入组成信源C的字符个数N。...

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

hsly152

2013.11.22

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:40%    等级:12

已帮助:22611人

模拟信源生成词表?随便手写一下。这里输入的概率用的是各自的出现次数,所以都是整数。

要使用计算出来的非整数概率,直接修改 P 的类型和输入环节即可。

int R = 0, *P = NULL;

char *C = NULL;

void init( int r ) {

int i, s, t;

R = r > 0 ? r : 1;

P = realloc( P, (R+1)*sizeof(*P) );

C = realloc( C, (R+1)*sizeof(*C) );

for ( i=0; i

scanf( "%c %d", &C[i], &P[i] );

for ( s=i=0; i

t = s + P[i], P[i] = s, s = t;

P[R] = s;

}

char *gen( int n, char *buf ) {

const int M = P[R];

int i, j;

for ( i=0; i

int r = random() % M;

for ( j=0; r > P[j+1]; j++ );

buf[i] = C[j];

}

buf[i] = '\0'

return buf;

}

/*--- in main() ---*/

char buf[4096];

int r, n;

srandom(time(0));

scanf( "%d", &r );

init( r );

while ( scanf( "%d", &n ) > 0 )

printf( "%s\n", gen( n, buf ) );

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值