洛谷 P3926 一道不可做题 题解

这个向下取整确实有点坑(提交三次才过

思路:

题目要求在加热x分钟后输出此时的蒟蒻 果冻温度,在计算时可以用a来记录温度,x计算时间,通过while循环来实现温度和时间的变化:

	//如果每tim单位时间加热tem单位温度
	while(/*看情况写*/){
		a=a+tem;
		x=x-tim;
		if(x<=0){//如果x小于等于零,说明渐热时间用完,停止加热
			cout<<a;
			return 0;
		}
	}

临界点时(熔点c):

		x=x-q;//熔点时需加热q分钟
		if(x<=0){
			cout<<a;
			return 0;
		}

有了这些,可以开始正题了,但是要注意的是:

//温度向下取整,也就是说,如果加热结束时不足p(或q)单位时间,则认为在这最后一小段时间内果冻温度没有任何变化。
所以上面的while循环判定要改一改:

	while(...){
		...
		if(x==0){//如果x等于零,说明刚好加热完成,输出a
			cout<<a;
			return 0;
		}
		if(x<0){//如果x不等于零,说明正在加热但还没有加热到下一度,输出a-1
			cout<<a-1;
			return 0;
		}
	}
接下来是正码:

有点长…

#include<bits/stdc++.h>
#include<iostream>
#include<stdio.h>
#include<iomanip>
using namespace std;

int main(){
	//写的有点啰嗦……
	int a,c,p,q,r,x;
	cin>>a>>c>>p>>q>>r>>x;
	
	//战术换行(便于观察)
	
	if(a<c){//初温低于熔点
		while(a<=c){//如果温度不大于熔点,继续加热
			a=a+1;
			x=x-p;
			if(x==0){
				cout<<a;
				return 0;
			}
			if(x<0){//向下取整
				cout<<a-1;
				return 0;
			}
		}
		if(a>c){//纯属计算误差,超过熔点则从熔点继续计算
			a=c;
		}
		x=x-q;
		if(x<=0){//此时不用考虑向下取整,因为a本就是熔点,a值无变化
			cout<<a;
			return 0;
		}
		while(a>=c){//纯粹"死循环" 
			a=a+1;
			x=x-r;
			if(x==0){
				cout<<a;
				return 0;
			}
			if(x<0){//向下取整
				cout<<a-1;
				return 0;
			}
		}
	}
	
	//战术换行(便于观察)
	
	if(a==c){//初温等于熔点
		x=x-q;
		if(x<=0){
			cout<<a;
			return 0;
		}
		while(a>=c){//纯粹"死循环" 
			a=a+1;
			x=x-r;
			if(x==0){
				cout<<a;
				return 0;
			}
			if(x<0){//向下取整
				cout<<a-1;
				return 0;
			}
		}
	}
	
	//战术换行(便于观察)
	
	if(a>c){//初温高于熔点
		while(a>=c){//纯粹"死循环" 
			a=a+1;
			x=x-r;
			if(x==0){
				cout<<a;
				return 0;
			}
			if(x<0){//向下取整
				cout<<a-1;
				return 0;
		//初温大于或等于熔点的情况是可以写在一起的,只是为了便于观察……
			}
		}
	}
}

写的大概有点太快,但注释说的还可以哈……
这应该是最基础的写法了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值