P3955 [NOIP2017 普及组] 图书管理员 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
方法1
解题思路
1.创建数组,储存图书编码
2.每输入一个读者的需求码,遍历整个数组
3.通过需求码长度,判断图书编码是否以这个读者的需求码结尾,创建一个变量min,找出最小以这个需求码结尾的图书编码
4.如果没有以这个需求码结尾的图书编码,输出-1
代码
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005];//创建数组
int main()
{
int n,q,l,m;
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i];//输入图书编码
}
for(int i=1;i<=q;i++)
{
int min=10000001;
cin>>l>>m;
for(int j=1;j<=n;j++)
{
int t=pow(10,l);
if(a[j]%t==m)//通过需求码长度找出以需求码结尾的图书编码
{
if(a[j]<min)
{
min=a[j];//找最小以这个需求码结尾的图书编码
}
}
}
if(min==10000001)
{
b[i]=-1;//如果没有图书编码符合要求
}
else
{
b[i]=min;
}
}
for(int i=1;i<=q;i++)
{
cout<<b[i]<<endl;//输出
}
return 0;
}
方法2
解题思路
1.创建数组,储存图书编码,用sort函数给数组进行升序排序
2.每输入一个读者的需求码,遍历整个数组
3.通过需求码长度,判断图书编码是否以这个读者的需求码结尾,如果有,退出循环,打标记
4.如果没有以这个需求码结尾的图书编码,输出-1
代码
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005];//创建数组
int main()
{
int n,q,l,m;
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i];//输入图书编码
}
sort(a+1,a+n+1);
for(int i=1;i<=q;i++)
{
bool flag=0;
cin>>l>>m;
for(int j=1;j<=n;j++)
{
int t=pow(10,l);
if(a[j]%t==m)//通过需求码长度找出以需求码结尾的图书编码
{
b[i]=a[j];
flag=1;//有图书编码符合要求
break;
}
}
if(flag==0)
{
b[i]=-1;//如果没有图书编码符合要求
}
}
for(int i=1;i<=q;i++)
{
cout<<b[i]<<endl;//输出
}
return 0;
}