我是靠谱客的博主 英勇柠檬,最近开发中收集的这篇文章主要介绍2017-noip普及组2-图书管理员,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目概述

图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图 书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小 D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写 一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他 需要的书,请输出-1。
[洛谷题源] (https://www.luogu.com.cn/problem/P3955)

题目分析

洛谷普及-的难度,适合新手入门,算法标签里有“字符串”,但个人感觉无需用字符串,用之反而还会被误导,并且题目的数据范围不大,适宜用整型。
个人思想是先对输入的图书编码排序,然后number()函数求每一个编码的长度(可不用),fun()函数用来比较需求编码是否是图书编码的后缀,一旦成功则是最小后缀(因为已经从小到大排序)

AC代码
#include<iostream>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<cstdio> 
#include<time.h>
#include<cmath>
#include<algorithm>
using namespace std;

int book[1005],need[1005];

int number(int a)
{ //求整数a的长度
	for(int i=1;i<=8;i++)
		{
			int b = pow(10,i);
			if( a%b==a) return i;
		}
}
bool fun(int a,int b)
{ //判断b是否是a的后缀 
	int lena = number(a);
	int lenb = number(b); 
	if( lenb > lena)return false;
	int c = pow(10,lenb);
	//	cout<<"a%c == "<<a%c<<endl;
	if(a%c == b) return true;
	else return false;
}

int main()
{
	int n,q,num;
	cin>>n>>q;
	for(int i=1;i<=n;i++)
		cin>>book[i];
	sort(book+1,book+n+1);  //对图书编码排序
	for(int i=1;i<=q;i++)
		{
			cin>>num>>need[i];
		}
	for(int i=1;i<=q;i++)
		{
		int flag=1;
		for(int j=1;j<=n;j++)
				{
					if(fun(book[j],need[i]))
						{
						cout<<book[j]<<endl;
						flag = 0;
						break;
						}
				}	
       	if(flag)cout<<-1<<endl;
	   }
 } 

最后

以上就是英勇柠檬为你收集整理的2017-noip普及组2-图书管理员的全部内容,希望文章能够帮你解决2017-noip普及组2-图书管理员所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部