我最近正在跟著一本書——《資訊學奧賽一本通(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;
}
我看完后很納悶
,我的程式哪里錯了?
求各位大佬們指教指教!!!感謝!!!十分感謝!!!




uj5u.com熱心網友回復:
能說說你邏輯嘛 沒細看。這題目挺簡單的 怎么寫這么復雜轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/258214.html
標籤:C++ 語言
下一篇:求助
