这个向下取整确实有点坑(提交三次才过 )
思路:
题目要求在加热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;
//初温大于或等于熔点的情况是可以写在一起的,只是为了便于观察……
}
}
}
}
写的大概有点太快,但注释说的还可以哈……
这应该是最基础的写法了