错误整理:
1.药房管理
错误次数:4
主要错误原因:审题不清
具体原因:
随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。
对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总量已知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有取上药
共 3 行。
第一行是每天开始时的药品总量 m\ (1\le m \le 1000)m (1≤m≤1000);
第二行是这一天取药的人数 n(0 < n \le 100)n(0<n≤100);
第三行共有 nn 个正整数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序,不超过 1000),两数之间以空格分隔。
30 6 10 5 20 6 7 8 2
这个题目描述的是药房剩下的药够不够这个病人需求,够就拿走,不够就不拿走。但是前三次我错以为是按照时间顺序,只要有一个人不拿走它这个药房就关了。第四次我以为是先用个冒泡给它来个大小排序再进行分药,先给少的再给多的,均错误。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m,n,sum=0,keep;
cin >> m >> n;
for(int a=1;a<=n;a++){
int num;
cin >> num;
sum+=num;
//printf("%d\n",sum);
if(sum==m){
keep=a;;
break;
}
else if(sum>m){
keep=a-1;
break;
}
}
cout << keep;
return 0;
}
第一次错误的代码段,可见即使是如此的意思,第一次的代码还是不乏漏洞,没有对于keep设置初始值,如果没有进入循环就会导致输出一个随机值,所以给keep设置一个初始值为0.
2.正常血压
连续出现的最长数字,貌似是双指针
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,count=0;
cin >> n;
int arr[n];
for(int a=0;a<n;a++){
int a1,a2;
cin >> a1 >> a2;
if(a1>=90&&a1<=140&&a2>=60&&a2<=90) arr[a]=1;
else arr[a]=0;
//cout << a1 << " "<< a2;
}
for(int a=0;a<n;a++){
int i=a;
if(i<n){
while(arr[i]==1) i++;
if(i-a>count) count=i-a;
}
}
cout << count;
return 0;
}
是可以的,但是因为不和a比,所以效率有点低。
3.小蒜的题
数列中的乘法可能一不小心搞成指针
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int arr1[22][6];
for(int a=0;a<n;a++){
for(int b=0;b<4;b++){
cin >> arr1[a][b];
}
}
for(int a=0;a<n;a++){
if(arr1[a][3]-arr1[a][2]==arr1[a][2]-arr1[a][1]&&arr1[a][2]-arr1[a][1]==arr1[a][1]-arr1[a][0]) arr1[a][4]=arr1[a][3]+arr1[a][3]-arr1[a][2];
else arr1[a][4]=arr1[a][3]*(arr1[a][3]/arr1[a][2]);
}
for(int a=0;a<n;a++){
for(int b=0;b<5;b++){
printf("%d ",arr1[a][b]);
}
printf("\n");
}
return 0;
} //
4.分数序列和
蒜术师有一个分数序列 \frac{q_1}{p_1},\frac{q_2}{p_2},\frac{q_3}{p_3},\frac{q_4}{p_4},\frac{q_5}{p_5},....p1q1,p2q2,p3q3,p4q4,p5q5,....,其中 q_{i+1}= q_i+ p_iqi+1=qi+pi, p_{i+1}=q_ipi+1=qi, p_1= 1p1=1, q_1= 2q1=2。比如这个序列前 66 项分别是 \frac{2}{1},\frac{3}{2},\frac{5}{3},\frac{8}{5},\frac{13}{8},\frac{21}{13}12,23,35,58,813,1321。求这个分数序列的前 nn 项之和。
可以用for三个数来回转。