核酸检测通道数目计算

题目:

这个题目最重要的是要明白,不管是二维码通道还是非二维码通道,二者都是同时进行的,而时间的最小值一定是3(才能保证至少能完成非二维码人群的检测)。

这个题目我的思路是用两层循环,时间作为第一层循环,非二维码组数作为第二层循环,运用break语句,就可以达到,满足条件后跳出循环,在时间最少,二维码组数最多的情况下,完成检测。

代码

#include<stdio.h>

#define N 10

#include<math.h>

int passway(int n,int n1,int *pn);

int main()

{

int n,n1,pn1;

int time;

scanf("%d %d",&n,&n1);

time=passway(n,n1,&pn1);

if(time>0)

printf("%d %d %d",pn1,N-pn1,time);

else

printf("error!");

}

int passway(int n,int n1,int *pn)

{

int time,N1,n2,N2;//N1指的是在限定时间和二维码通道数情况下,能做多少个有二维码的人,N2同理

int y;

n2=n-n1;

if(n<0||n1>=n||n2>=n)//题目中已经说明下列情况要输出error,但是主函数中是time<0 才输出出error,所以给time赋值<0即可

{

time=-1;

return time;

}

else

{

for(time=3;;time++)

{if(N1>=n1&&N2>=n2) //这个的话是为了跳出第一层循环,只要保证人数能做完,跳出循环,就能满足条件

break;

for(y=1;y<=9;y++) //让y作为变量是为了保证同等时间下,二维码通道数最多

{

N1=(10-y)*time;

N2=y*time/3;

if(N1>=n1&&N2>=n2) //这个的话是为了跳出第二个循环,

{

*pn=10-y;

break;

}

}

}

return time-1; //由于第二个循环中的break,只能跳出第二个循环,第一个循环又执行了一遍time++,所以要减掉一

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值