概述
题目描述:
图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图 书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小 D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写 一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他 需要的书,请输出-1。
今年普及组的第二题,较往年来说,难度大为下降。
首先来看一下算法:
这是一道纯模拟,先用一个b数组存放图书馆里面的书,在定义结构体,存放顾客所需码和所需码的位数。因为神奇的CCF为我们提供了所需码的位数,我们可以直接按位相除,求出尾数,再进行判断。
注意:
1.在进行判断最小值的时候,建议定义常量来进行比较(本蒟蒻今年犯这个错丢了80分)。
2.可以选择在读入b数组的时候就排一遍序(可以不排,但是不稳定)
代码如下:
#include<iostream>
#include<cstdio>
//#include<algorithm>
using namespace std;
//const int minn=1e+9; 比较最小值
//int res; 存放答案
int b[10001]; //存放图书馆书目的编码
struct cost{ //顾客的所需码和所需码的长度
int s; //所需码
int num; //长度
}a[101];
/*
int comp(int a,int b)
{
return a<b;
}
*/
int main()
{
int n,q;
scanf("%d %d",&n,&q); //建议用scanf的时候打空格
for(int i=1;i<=n;i++)
scanf("%d",&b[i]); //读入
//sort(b+1,b+n+1,comp);
for(int i=1;i<=q;i++)
scanf("%d%d",&a[i].s,&a[i].num);
int c,d,e;
int minn=99999999;
bool t=true; //判断是否有出现
for(int i=1;i<=q;i++) //q位顾客循环q次
{
for(int j=1;j<=n;j++) //每一个都试一次
{
c=b[j];
d=a[i].s;
e=a[i].num; //c,d,e 暂时存放
while(d!=0)
{
if(c%10==e%10) //如果最后一位都相等
{
c/=10; //继续判断
e/=10;
d--;
t=true; //寻找到答案
}
else
{
t=false; //否则的话不是答案
break; //跳出
}
}
if(t==true) //如果有答案
{
if(b[j]<minn) //并且小于minn值
minn=b[j]; //更新minn值
}
*/
else
continue; //否则继续查找
}
if(minn!=99999999) //当全部找完是,如果minn不为原值的话, 就说明找到了一个值
{
printf("%dn",minn); //输出现在的最小值
t=false;
minn=99999999; //为下一次查找回复原值
}
else
printf("-1n"); //否则就是没找到
}
fclose(stdin);
fclose(stdout);
return 0;
}
最后
以上就是感动冰淇淋为你收集整理的LUOGU P3955题解(NOIP 2017第二题)的全部内容,希望文章能够帮你解决LUOGU P3955题解(NOIP 2017第二题)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复