【C语言】随机数/随机抽卡求和

该代码示例演示了如何使用C++从1到20的整数中不放回地随机抽取5个数,计算它们的和(sum1),并找出未被抽取的15个数的和(sum2)。通过使用两个数组,一个存储原始数据,另一个标记已抽取的状态,确保不会重复抽取。最后输出sum1和sum2的值。
摘要由CSDN通过智能技术生成

问题描述

从1~20之间随机抽取5个数,分别输出抽取出来的5个数之和和剩余未被抽取的15个数之和。

解决方案

数组标记防重复+rand

int main()
{
    int a[20],v[20];
	int sum1=0;//被抽数求和
	int sum2=0;//未被抽数求和
    int t;
    for(int i=0;i<20;i++)
    {
        a[i]=i;//供抽取的20个数
		v[i]=0;//标志已被抽取的数
    }
 
    srand(time(NULL));//是以当前时间为种子,产生随意数。其中,time(NULL)用来获取当前时间,本质上得到的是一个大整数,然后用这个数来随机数
    for(int i=0;i<5;)
    {
        t=rand()%20; //取随机数。0-19
        if(v[t]==0)
        {//排除重复的随机数
 
                v[t]=1;
				sum1=sum1+t+1;
                i++;
            }
 
    }

	printf("sum1=%d\n",sum1);
 
    for(int i=0;i<20;i++)
	{
        if(v[i]==0) 
		sum2=sum2+a[i]+1;
	}
 	printf("sum2=%d",sum2);
	system("pause");
    return 0;
}

输出结果

 

总结

  题目暗含有不放回抽取的意思,所以要避免重复随机数,故而设置2个数组,一个存储待抽取的数,一个用于标志抽取情况。若只要求求抽取的5个数之和可以不用a[]数组也能实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值