C++新手小白求救各位大佬!!!我的程序为何不对?

WYHMingMing 2021-02-09 11:40:13
我最近正在跟着一本书——《信息学奥赛一本通(C++版)》学习C++,书后练习题里有一道题如下:

【题目描述】
监护室每小时测量一次病人的血压,若收缩压在90-140之间并且舒张压在60-90之间(包含端点值)则称之为正常,现给出某病人若干次测量的血压值,计算病人保持正常血压的最长小时数。

【输入】
第一行为一个正整数n(n<100),其后有n行,每行2个正整数,分别为一次测量的收缩压和舒张压。

【输出】
输出仅一行,血压连续正常的最长小时数。

【输入样例】
4
100 80
90 50
120 60
140 90
【输出样例】
2

我的程序如下:


# include <cstdio>
using namespace std;
int main()
{
int hour, systolic, diastolic, last_keep = 0, next_keep = 0, not_normal = 0;
//定义hour小时数、systolic收缩压、diastolic舒张压、last_keep和next_keep保持小时数和not_normal不正常小时数整型变量
scanf("%d", &hour); //scanf输入小时数
for (int i = 1; i <= hour; ++i) //利用for循环让用户输入hour遍血压
{
scanf("%d %d", &systolic, &diastolic); //scanf输入收缩压和舒张压
if ((90 <= systolic) && (systolic <= 140) && (60 <= diastolic) && (diastolic <= 90)) //判断血压是否正常
{
if (not_normal == 0) //判断血压是否还没有不正常过
{
last_keep += 1; //(不正常之前的)保持小时数加1
}
else //血压已经不正常过了
{
next_keep += 1; //(不正常之后的)保持小时数加1
if (next_keep > last_keep) //判断新保持小时数是否破纪录了
{
last_keep = next_keep; //更新记录,不管前面的连续保持,以这个新纪录为新起点继续
next_keep = 0; //更新标准后归零
not_normal = 0; //更新标准后归零
}
}
}
else //血压不正常
{
if (not_normal == 0) //判断是不是第一次不正常
{
not_normal += 1; //不正常次数加1
}
}
}
printf("%d\n", last_keep); //printf输出最长纪录
return 0; //结束程序
}


那本书有一个配套的测评网站——http://ybt.ssoier.cn:8088/,我把程序传上去之后它说答案错误,我很纳闷,看了书后参考答案,参考答案如下:


#include <cstdio>
using namespace std;
int main()
{
int a,b,i,n,t,m,j,max=0; //max储存病人血压连续正常的最长小时数
scanf("%d", &n); t=0;
for(i=1;i<=n;++i) //循环判断每个小时中,病人的血压是否正常
{
scanf("%d%d",&a,&b);
if (a>=90&&a<=140&&b>=60&&b<=90)
//判断在i个小时中,病人的血压是否正常
{
t++;
if (t>max) max=t;
}
else t=0; //这个病人血压不正常,则清零t
}
printf("%d\n",max);
return 0;
}


我看完后很纳闷,我的程序哪里错了?

求各位大佬们指教指教!!!感谢!!!十分感谢!!!
...全文
287 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
WYHMingMing 2021-02-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_41520996 的回复:
你这个程序应该是清零的问题,判断最大值和数据清零应该放在下面异常情况里
可是异常的时候不一定next_keep就大于last_keep呀
WYHMingMing 2021-02-16
  • 打赏
  • 举报
回复
引用 3 楼 qzjhjxj 的回复:
题目要求是正常的吋候的时长统计,不正常的就不用统计了,只要保存正常的最久的时长就可以啦。
确实啊,每次只要正常就会判断next_keep是否大于last_keep呀,如果大于就把老的last_keep替换成next_keep
_TheAurora_ 2021-02-15
  • 打赏
  • 举报
回复
你这个程序应该是清零的问题,判断最大值和数据清零应该放在下面异常情况里
qzjhjxj 2021-02-12
  • 打赏
  • 举报
回复
题目要求是正常的吋候的时长统计,不正常的就不用统计了,只要保存正常的最久的时长就可以啦。
WYHMingMing 2021-02-11
  • 打赏
  • 举报
回复
引用 1 楼 github_37127447 的回复:
能说说你逻辑嘛 没细看。这题目挺简单的 怎么写这么复杂
last_keep就是血压不正常之前的正常保持数,next_keep是血压不正常之后的正常保持数,如果next_keep大于last_keep就更新last_keep为next_keep,next_keep清零,不正常数量清零,以新的last_keep为最长保持时间标准继续判断,不知道说没说清楚 望解答!!!谢谢谢谢!!
熊猫呀 2021-02-09
  • 打赏
  • 举报
回复
能说说你逻辑嘛 没细看。这题目挺简单的 怎么写这么复杂

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧