C语言实现概率论中的验血问题

本文介绍了一道概率论问题的C语言实现,涉及疾病筛查的两种方法:逐个抽验和分组抽验。通过计算期望值,确定在不同患病概率p和分组数k下,哪种方法更优。程序根据输入的参数,自动判断并输出最佳策略,揭示在大量样本、大分组数和低患病率情况下,分批检验的高效性。
摘要由CSDN通过智能技术生成

有这样一道概率论题目,我认为将其编写为C程序实现是一件非常有意思的事情,题目如下:

在一个人数很多的团体中普查某种疾病,为此要抽验N个人的血。有如下两种方法,法一为逐个抽验,则需验N次,法二为按k个人一组进行分组,把K个人抽来的血液混合在一起检验,如果呈阴性,则这k个人正常,只需要验一次。如果呈阳性,则这k个人逐个化验,则这k个人要验k+1次。现假设每个人化验呈阳性概率为p,且每个人化验结果相互独立,问p、k取不同值时对方法的选择如何。

在概率论中,这是一道依照期望来比较的题目,但当我们将它视为一道C语言题目,我们就需要在输入不同的k值后给定不同的抽验方案。

#include<stdio.h>
#include<math.h>
int main()
{
    float p,k,N;//输入量
	float Ex1,Ex2;//两种方法中每个人要验证次数的期望 
	printf("请依次输入总化验人数N,分成组数k,每个人化验呈阳性的概率p\n");
	scanf("%f %f %f",&N, &k, &p);
	float n=N/k;//每组人数
	float q=1-p;//呈阴性的概率 
	Ex1=1;//第一种方法默认每个人都要检测,所以每个人检测次数的期望为1 
	float x=pow(q,n);
	Ex2=1-pow(q,n)+1/n; 
	if(Ex2>Ex1){
			printf("应该逐个验血\n");
			printf("总验血次数为%f次\n",N*Ex1);
			printf("这样验血比另一种方法效率提高了%f\n",(Ex2-Ex1)); 
		} else{
			printf("应该分批次验血\n");
			printf("总验血次数为%f次\n",N*Ex2);
			printf("这样验血比另一种方法效率提高了%f\n",(Ex1-Ex2)); 
		}
return 0;
}

这样,在输入不同的检验情况时就会给出不同的采样方案,我认为是一件非常有趣的事情(毕竟像我这样概率论差点挂科的人是不会愿意去算的)

在这里插入图片描述在这里插入图片描述

在这里插入图片描述从这些结果也可以看出,在样本人数足够多、分组组数足够大、患病概率足够低任意情况下,都可以使用分批检验。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值