循环综合练习日志

错误整理:

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},....p1​q1​​,p2​q2​​,p3​q3​​,p4​q4​​,p5​q5​​,....,其中 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三个数来回转。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值