概述
题目概述
图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图 书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小 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-图书管理员所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复