who:关键词
n,q 定义书的数量和读者的数量
nm[1005] 定义图书馆里某本书的图书编码
qc 定义图书馆里读者的需求码的长度
qm 定义读者的需求码
what:关键联系
什么是第i个读者所需要的书中图书编码最小的那本书的图书编码
(1)首先与读者的需求码的长度一样
(2)图书编码最小的那本书
例如:
输入2 23,表示读者的需求码的长度是2,读者的需求码是23,有,输出23;
输入3 124 ,表示读者的需求码的长度是3,读者的需求码是124,没有,输出-1;
思考:
(1)如何快速判断是不是第i个读者所需要的书中图书编码
(2)最小的那本书的图书编码
逐一判断输入(可能出现n个-1)
how:算法分析
解决方案1:if/else
判断是否存在第i个读者所需要的书;
是输出第j个读者所需要的书中图书编码最小的那本书的图书编码,不然输出-1;
劣势:
会多次输出-1(WA)
解决方案2:if/if
判断是否存在第i个读者所需要的书; 将变量a归零; 判断是否存在第j个读者所需要的书; 输出第j个读者所需要的书中图书编码最小的那本书的图书编码; 是输出第j个读者所需要的书中图书编码最小的那本书的图书编码; 将a设为1; 结束循环;
循环外 如果a=0,输出-1;
求解步骤
(1)先求什么
先用sort将nm从小到大排序
(2)接着求什么
接着判断是否存在第i个读者所需要的书
(3)接着求什么
是则输出第i个读者所需要的书中图书编码最小的那本书的图书编码;否则输出-1
注:根据题目:对于100% 的数据1≤n≤1000,1≤q≤10001≤n≤1000,1≤q≤1000,所有的图书编码和需求码均不超过10的7次方
需定义数组
int bx[8]={0,10,100,1000,10000,100000,1000000,10000000};
代码
#include<bits/stdc++.h>
using namespace std;
int n,q;//定义书的数量和读者的数量
int nm[1005];//定义图书馆里某本书的图书编码
int qc;//定义图书馆里读者的需求码的长度
int qm;//定义读者的需求码
int bx[8]={0,10,100,1000,10000,100000,1000000,10000000};
int a;
int main(){
cin>>n>>q;//输入图书馆里书的数量和读者的数量
for(int i=0;i<n;i++){
cin>>nm[i];//输入图书馆里某本书的图书编码
}
sort(nm,nm+n);//将nm从小到大排序
for(int i=0;i<q;i++){
cin>>qc>>qm;//输入图书馆里读者的需求码的长度//输入读者的需求码
a=0;//归零
for(int j=0;j<n;j++){
if(nm[j]%bx[qc]==qm){//判断是否存在第j个读者所需要的书
cout<<nm[j]<<endl;//输出第j个读者所需要的书中图书编码最小的那本书的图书编码
a=1;//将a设为0
break;//结束
}
}
if(a==0) cout<<-1<<endl;//否则输出-1
}
return 0;
}