PTA 做核酸
代码如下:
#include <stdio.h>
int main()
{
int x,y,z,ji,t=0,d,c; //其中的t为列数,把要去的窗口数转换为求排队的列数
scanf("%d %d %d",&x,&y,&z);
ji=x*y;
if(x==1&y==1){ //考虑当窗口数和列数为1的情况
printf("1\n");
}else if(y==1&&z%x!=0){ //当列数为1,窗口数不为1,同学个数不能被窗口数整除的情况
t=z%x;
printf("%d",t);
}else if(y==1&&z%x==0){ //当列数为1,窗口数不为1,同学个数能被窗口数整除的情况
t=x;
printf("%d",t);
}
if(z%y==0) { //判断同学个数能否被每列同学数整除
t=z/y; //能被整除就直接相除
}
else if(z%y!=0) {
t=z/y+1; //不能被整除就加一列
}
if(z<=ji&&x!=1&&y!=1){ //当列数没超过窗口数时,直接输出列数
printf("%d",t);
}else if(z>ji&&x!=1&&y!=1){ //当列数超过窗口数则进入新的周期
d = z % ji; //每次周期后多出来的同学数
if (d == 0){ //如果刚好整除则为窗口边界值
printf("%d", x);
}else if(d % y == 0){ //判断同学个数能否被每列同学数整除
c = d / y; //能被整除就直接相除
printf("%d", c);
}else if (d % y != 0){ //不能被整除就加一列
c = d / y + 1; // 与上面的t类似
printf("%d", c);
}
}
return 0;
}
其实这里的算法有很多种,但是算法不同考虑的情况个数也不同,要注意边界值的计算,漏情况的话,pta就不给满分了!