目录
查找学生信息
- 题目描述:
输入 N 个学生的信息,然后进行查询。
- 输入描述:
输入的第一行为 N,即学生的个数(N<=1000) 接下来的 N 行包括 N 个学生的信息,信息格式如下:
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
然后输入一个 M(M<=10000),接下来会有 M 行,代表 M 次查询,每行输入一个学号,格式如下: 02
03
01
04
- 输出描述:
输出 M 行,每行包括一个对应于查询的学生的信息。 如果没有对应的学生信息,则输出“No Answer!”
- 输入样例#:
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
02
03
01
04
- 输出样例#:
02 刘唐 男 23
03 张军 男 19
01 李江 男 21
04 王娜 女 19
03 张军 男 19
使用 map 来解决这类问题
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
string num;
string name;
string sex;
int age;
};
int main(){
int n,q;
map<string ,node> M;//定义一个map映射,索引num(string类型)->结构体
while(scanf("%d",&n) != EOF){
for(int i = 0;i<n;i++){
node tmp;
cin>>tmp.num>>tmp.name>>tmp.sex>>tmp.age;
M[tmp.num ] = tmp;//将学号指向对应的结构体
}
scanf("%d", &q);
for(int i = 0;i<q;i++){
string num;
cin>>num;
if((M.find(num))!=M.end())
cout<<M[num].num<<" "<<M[num].name<<" "<<M[num].sex<<" "<<M[num].age<<endl;
else
cout<<"No Answer!"<<endl;
}
}
return 0;
}
动态查找问题
题目描述
有n个整数的集合,想让你从中找出x是否存在。
输入描述:
第一行输入一个正整数n(n < 100000) 第二行输入n个正整数,用空格隔开。 第三行输入一个正整数q(q<100000),表示查询次数。 接下来输入q行,每行一个正整数x,查询x是否存在。
输出描述:
如果x存在,请输出find,如果不存在,请输出no,并将x加入到集合中。
输入样例#:
5 1 2 3 4 5 3 6 6 3
输出样例#:
no find find
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n,q,x;
map<int,int>M;//数字 —>出现次数
while(cin>>n){//输入正整数n
for(int i = 0;i<n;i++){
cin>>x;//输入n个正整数
M[x]++;
}
cin>>q;//输入查询次数q
for(int i = 0;i<q;i++){
cin>>x;
if (M[x] ==0){///如果 x的次数为0
cout<<"no\n"<<endl;
M[x]++;;//将 x 加入到集合中
}
else cout<<"find\n"<<endl;
}
}
return 0;
}
查找学生信息
题目描述
“臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。 首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。
输入描述:
多组测试数据。 每个案例第一行两个整数N,M,2 <= N ,M<= 200。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P(1<=P<=M)
输出描述:
每个案例包括N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”(即悲剧,^ ^)
输入样例#:
4 5 2 3 2 1
输出样例#:
1 BeiJu 1 BeiJu
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n,m;
while(cin>>n>>m){
map<int,int> M;//最喜欢的图书编号->图书出现次数
int a[n];//读者最喜欢的图书
for(int i = 0;i<n;i++){
cin>>a[i];//输入读者i阅读的书
M[a[i]]++;
}// 阅读的书相同的时候,图书+1
for(int i = 0;i<n;i++){
if(M[a[i]]>=2)
cout<<(M[a[i]] - 1)<<endl;//除去自身阅读的一本以外
else
cout<<"Beiju"<<endl;
}
}
return 0;
}
查找1
题目描述
输入数组长度 n
输入数组 a[1...n]
输入查找个数m
输入查找数字b[1...m]
输出 YES or NO 查找有则YES 否则NO 。
输入描述:
输入有多组数据。 每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。
输出描述:
如果在n个数组中输出YES否则输出NO。
输入样例#:
6 3 2 5 4 7 8 2 3 6
输出样例#:
YES NO
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n,m,x;
int a[n];
map<int,int>M;//map映射
cin>>n;//输入n
for(int i = 0;i<n;i++){
cin>>a[i];//输入n个整数
M[a[i]]++;//数i出现的次数
}
cin>>m;//输入查找的数字个数m
while(m--){
cin>>x; //输入要查找的m个数字
if(M.find(x)!= M.end()) //用find这个函数,去找M这个映射中的x,如果映射中的x存在,就不会返回end()。
cout<<"YES"<<endl;
else
cout<<"No"<<endl;
}}
查找 - 北邮
题目描述
读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1、翻转 从下标为i的字符开始到i+len-1之间的字符串倒序;2、替换 命中如果第一位为1,用命令的第四位开始到最后的字符串替换原读入的字符串下标 i 到 i+len-1的字符串。每次执行一条命令后新的字符串代替旧的字符串(即下一条命令在作用在得到的新字符串上)。 命令格式:第一位0代表翻转,1代表替换;第二位代表待操作的字符串的起始下标int i;第三位表示需要操作的字符串长度int len。
输入输出格式
输入有多组数据。 每组输入一个字符串(不大于100)然后输入n,再输入n条指令(指令一定有效)。
输出描述:
根据指令对字符串操作后输出结果。
输入样例
bac 2 003 112as
输出样例
cab cas
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
int n;
cin>>s>>n;
for(int i=0;i<n;i++)
{ string cmd;//命令
cin>>cmd;
int Begin = cmd[1] - '0';//命令第二位代表起始下标
int len = cmd[2] - '0';//命令第三位代表字符串长度
if(cmd[0] == '0')
{//翻转
reverse(s.begin()+Begin,s.begin()+Begin+len);
}
else
{//替换
//从命令字符串cmd下标为3处获得长度为 cmd.size()-3的字符串
string purpose = cmd.substr(3,cmd.size()-3);
s.replace(Begin,Begin+len-1,purpose);
}
cout<<s<<endl;
}
return 0;
}
查找第K小数
题目描述
查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。
输入描述:
输入有多组数据。 每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出描述:
输出第k小的整数。
输入样例
6 2 1 3 5 2 2 3
输出样例
3
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[n],k;
while(cin>>n){
for(int i;i<n;i++)
cin>>a[i];
set<int> s;
for(int i = 0;i<n;i++)
s.insert(a[i]);
cin>>k;
auto p = s.begin();
while(--k) p++;
cout<<*p;
}
return 0;
}