牛客图书管理员问题C++

2021.4.28 🌤 图书管理员 from 牛客网

o( ̄▽ ̄)ブ

心头爱

show my code

#include<iostream>
#include<math.h>

using namespace std;

typedef struct stu_need{
	int num;
	int need;
}stu;

int main(){
	int n,q,i,j;
	cin>>n>>q;//输入书籍数量和借阅人数
	int *book = new int[n];//开辟图书数组
	stu *stuid = new stu[q];//开辟学生数组
	int *res = new int[q];//存储最终结果
	for(i=0;i<n;i++) cin>>book[i];//输入n个图书的id
	for(j=0;j<q;j++) {
		int t_book = 100000001; //用于比较的临时变量
		cin>>stuid[j].num>>stuid[j].need; //输入借阅者信息
	    for(int h=0;h<n;h++){ //遍历书库
		if((stuid[j].need==(book[h]%(int)pow(10,stuid[j].num)))&&book[h]<=t_book) //如果满足最后位的等于关系并且图书Id比临时变量小,就用当前的bookid替换临时变量
		t_book = book[h]; 
		} 
		if(t_book==100000001) res[j] = -1;//如果没找到,结果就是-1
		else res[j] = t_book; //如果找到了,结果就是比较临时变量                        		
	}
	for(int k = 0;k<q;k++){		//输出最终结果
	 	cout<<res[k]<<endl;                      		
	}	
	delete []book;//手动释放空间,清除对象
	delete []stuid;
	delete []res;
	return 0;
}

what behind my code

输入

依照题目的要求,需要输入图书馆已有书籍数量n以及n本书籍的编号,借阅读者的数量q、q位读者的编号长度以及各自的编号。因此可以定义一个stu的结构体来存储读者的信息,分别开辟book数组和stuid数组来存储图书和读者分别的测试信息。

typedef struct stu_need{
	int num;
	int need;
}stu;
	int n,q,i,j;
	cin>>n>>q;
	int *book = new int[n];
	stu *stuid = new stu[q];
	int *res = new int[q];
	for(i=0;i<n;i++) cin>>book[i];
	for(j=0;j<q;j++) {
		int t_book = 100000001;
		cin>>stuid[j].num>>stuid[j].need;

处理

想到题目规定只要书籍的结尾数字是读者的需求数字就被算作读者的需求(bookid是1123,读者需求id是23这种),因为想到题目本身就给了读者需求数字的位数,因此对每输入一个读者,可以利用pow()函数对书库进行取余遍历,由于题目要求是最小的图书id输出,因此保存一个临时的比较变量,如果当前满足条件的图书id比临时变量还要小的话,对临时变量进行替换。

for(j=0;j<q;j++) {
		int t_book = 100000001; //用于比较的临时变量
		cin>>stuid[j].num>>stuid[j].need; //输入借阅者信息
	    for(int h=0;h<n;h++){ //遍历书库
		if((stuid[j].need==(book[h]%(int)pow(10,stuid[j].num)))&&book[h]<=t_book) //如果满足最后位的等于关系并且图书Id比临时变量小,就用当前的bookid替换临时变量
		t_book = book[h]; 
		} 
		if(t_book==100000001) res[j] = -1;//如果没找到,结果就是-1
		else res[j] = t_book; //如果找到了,结果就是比较临时变量                        		
	}

输出

因为我的处理在输入的过程中完成,根据题目要求,不能处理一个元素之后就进行输出,因此必须开辟一个跟借阅者数量一致的数组存储结果,最后遍历数组进行输出即可。

int *res = new int[q];//存储最终结果
for(int k = 0;k<q;k++){		//输出最终结果
	 	cout<<res[k]<<endl;                      		
	}	

reference

[1]c++定义数组

sharing part

C语言于1972年11月问世,1978年美国电话电报公司(AT&T)贝尔实验室正式发布C语言,1983年由美国国家标准局(American National Standards Institute,简称ANSI)开始制定C语言标准,于1989年12月完成,并在1990年春天发布,称之为ANSI C,有时也被称为 C89 或 C90。
from here

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值