输入的第一行为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!”
4 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 5 02 03 01 04 03
02 刘唐 男 23 03 张军 男 19 01 李江 男 21 04 王娜 女 19 03 张军 男 19
//注意细节,比如说学号不一定从1开始,但是依然是连续的
#include<iostream>
#include<string>
using namespace std;
struct Student{
string number;
string name;
string gender;
int age;
};
int main(){
int n;
cin>>n;
Student* student=new Student[n];
for(int i=0;i<n;i++)
cin>>student[i].number>>student[i].name>>student[i].gender>>student[i].age;
int m;
int begin = atoi(student[0].number.c_str());
cin>>m;
for(int i=0;i<m;i++){
int temp;
cin>>temp;
if(temp<begin||temp>begin+n-1)
cout<<"No Answer!"<<endl;
else
cout<<student[temp-begin].number<<" "<<student[temp-begin].name<<" "<<student[temp-begin].gender<<" "<<student[temp-begin].age<<endl;
}
} 注意学号可以用string类型表示,否则01输出是时会输出1
#include<iostream>
using namespace std;
struct Student{
string sno;
string name;
string sex;
int age;
};
int main(){
int N;
while(cin >> N){
//判断
if(N > 1000) break;
Student* student = new Student[N];
for(int i = 0; i < N; i++){
cin >> student[i].sno >> student[i].name >> student[i].sex >> student[i].age;
}
int M;
cin >> M;
string arr[M];
for(int i = 0; i < M; i++){
cin >> arr[i];
//查询
int b = 0;// 表示查询情况,0代表查询失败,1代表查询成功
for(int j = 0; j < N; j++){
if(arr[i] == student[j].sno){
cout << student[j].sno << " " << student[j].name << " " << student[j].sex << " " << student[j].age << endl;
b++;}
}
if(b == 0) cout << "No Answer!" << endl;
}
}
return 0;
}
#include <iostream>
(720)#include <cstdint>
#include <cstdio>
(802)#include <map>
using namespace std;
/*
查找学生信息
input:
4
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
5
02
03
01
04
03
output:
02 刘唐 男 23
03 张军 男 19
01 李江 男 21
04 王娜 女 19
03 张军 男 19
*/
map<string, string> stu;
int main()
{
// freopen("data.txt","r", stdin);
int n;
scanf("%d", &n);
getchar(); // 吃掉回车,
for (int i = 0; i < n; i++)
{
string str;
getline(cin, str);
int pos = str.find(" "); // 根据第一个空格来分割
string key = str.substr(0, pos);
stu[key] = str; // 保存学号和学生信息
}
int m;
scanf("%d", &m);
for(int i=0;i<m;i++) {
string key;
cin >> key;
string answer = stu[key];
if(answer=="") {
answer = "No Answer!";
}
cout << answer << endl;
}
return 0;
} #include<iostream>
using namespace std;
int main()
{
int M,N;
while(cin>>N)
{
string id[N];
getchar();//把输入缓冲区的回车吃掉,N后的
for(int i=0;i<N;getline(cin,id[i++]));
while(cin>>M)
{
string num;
for(int i=0;i<M;i++)
{
cin>>num;
for(int j=0;j<N;j++)
{
if((id[j].find(num)==0)&&(id[j].find(' ')==num.length()))
//防止id:4 未输入,id:40输入时输出40的信息
{
cout<<id[j]<<endl;
break;
}
if(j==N-1)
cout<<"No Answer!"<<endl;
}
}
}
}
}
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
// 学生基本信息节点(除学号)
struct Node
{
string name;
string sex;
string age;
};
map<string, Node> m;
int main()
{
int N, M;
Node t;
string tmp;
cin >> N;
for(int i = 0; i < N; ++i)
{
cin >> tmp;
cin >> t.name >> t.sex >> t.age;
m[tmp] = t;
}
map<string, Node>::iterator mit; // 定义迭代器
cin >> M;
while(M--)
{
cin >> tmp;
mit = m.find(tmp);
if(mit == m.end())
{
// 如果不存在
cout << "No Answer!" << endl;
}
else
{
cout << tmp << " " << m[tmp].name << " " << m[tmp].sex << " " << m[tmp].age << endl;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
getchar();
map<string, string>myMap;
//直接用字符串存储信息,就不用建立结构体,建立字符串到字符串的映射
while(n--)
{
string id;//学号
string otherInfo;//其他信息
cin>>id;
getline(cin, otherInfo);
myMap[id]=otherInfo;
}
int m;
cin>>m;
while(m--)
{
string id;
cin>>id;
string answer=myMap[id];
if(answer=="")
cout<<"No Answer!"<<endl;
else
cout<<id<<answer<<endl;
}
return 0;
} import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int size = Integer.parseInt(scanner.nextLine());
Map<String, String> map = new HashMap<>();
for (int i=0; i<size; i++) {
String line = scanner.nextLine();
map.put(line.substring(0, line.indexOf(" ")), line);
}
size = Integer.parseInt(scanner.nextLine());
for (int i=0; i<size; i++) {
System.out.println(map.getOrDefault(scanner.nextLine(), "No Answer!"));
}
}
}
}
#include<iostream>
#include<cstdio>
#include<string>
#include<map>
using namespace std;
struct inf{
string name, sex;
int age;
};
int main(){
int n, m;
map<string, inf> mp;//建立学号和信息之间的映射
cin >> n;
for(int i = 0; i < n; i++){
string num, name, sex;
int age;
cin >> num >> name >> sex >> age;
mp[num].name = name;
mp[num].sex = sex;
mp[num].age = age;
}
cin >> m;
while(m > 0){
m--;
string tempnum;
cin >> tempnum;
if(mp[tempnum].name == "") cout << "No Answer!" << endl;
else cout << tempnum << " " << mp[tempnum].name << " " << mp[tempnum].sex << " " << mp[tempnum].age << " "<< endl;
}
return 0;
} #include<stdio.h>
(737)#define N 1000
struct student
{
int num;
char name[20];
char sex[10];
int age;
}stu[N];
int main()
{
int n,m,i,j,key,b[10000];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%s%s%d",&stu[i].num,stu[i].name,stu[i].sex,&stu[i].age);
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d",&b[i]);
for(i=0;i<m;i++)
{
key=0;//表示没有这个人
for(j=0;j<n;j++)
if(b[i]==stu[j].num)
{ key=1;break; }
if(key==1)
printf("%d %s %s %d\n",stu[j].num,stu[j].name,stu[j].sex,stu[j].age);
else
printf("No Answer!\n");
}
} /**
*@author Lucien
*二分查找
*/
#include "stdio.h"
#include "stdlib.h"
struct E{
char id[5];//id本来设置成的整型数,但是输出格式不对
char name[20];
char sex[10];
int age;
}s[1000];
int main(){
int n,m,i,mid,id,high,low,flag = 0;
while(scanf("%d", &n) != EOF){
for(i = 0; i < n; i++){ //其中字符型的地址就是数组名,就不需要取地址的运算
scanf("%s%s%s%d", &s[i], s[i].name, s[i].sex, &s[i].age);
}
for(scanf("%d",&m),i=0;i < m; i++){
scanf("%d",&id); //每次查询都需要初始化high low指针
high = n-1;
low=0;
flag = 0;
while(high>=low){ //循环退出的条件原来写的是high < low,
//但是仔细一看,high可能小于low吗?
//答案是可能,没有但是
//而当查找不到结果的时候,high和low差1;mid = low,
//id大于mid的id(也就是low),所以high = mid - 1 = low -1
mid = (high + low) / 2;
if(atoi(s[mid].id) == id){
flag = 1;
printf("%s %s %s %d\n",s[mid].id, s[mid].name, s[mid].sex, s[mid].age);
break;
}else {
//更新low high指针的时候,一个是+1,一个是-1,我两个写成-1了
//被自己菜哭
high = (atoi(s[mid].id) > id) ? mid-1 : high;
low = (atoi(s[mid].id) < id) ? mid+1 : low;
}
}
if(flag == 0) printf("No Answer!\n");//最后一次忘记回车没有通过我很无奈
}
}
return 0;
}
//相对麻烦的是采用字符串的二维数组来存储数据
try:
while True:
n = int(input())
students = []
idStu = []
for i in range(n):
students.append(input())
idStu.append(students[i].split()[0])
m = int(input())
for i in range(m):
temp = input()
if temp in idStu:
print(students[idStu.index(temp)])
else:
print('No Answer!')
except Exception:
pass
#include <iostream>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
struct student{
string id;
string name;
string sex;
int age;
};
int main(){
int n;
while(cin>>n){
vector<student> students(n);
int i,m;
string ids[10000];
for(i=0;i<n;i++)
cin>>students[i].id>>students[i].name>>students[i].sex>>students[i].age;
cin>>m;
for(i=0;i<m;i++)
cin>>ids[i];
for(i=0;i<m;i++){
bool flag=false;
for(int j=0;j<n;j++){
if(ids[i]==students[j].id){
cout<<students[j].id<<" "<<students[j].name<<" "<<students[j].sex<<" "<<students[j].age<<endl;
flag=true;
break;
}
}
if(!flag) cout<<"No Answer!"<<endl;
}
}
return 0;
} #include <iostream>
#include <stdio.h>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
typedef struct Node{
string num;
string name;
string sex;
int age;
} Node;
int main(){
int n,m;
map<string, Node> mmap;
while(scanf("%d", &n)!=EOF){
for(int i=0;i<n;i++){
Node tmp;
cin>>tmp.num>>tmp.name>>tmp.sex>>tmp.age;
mmap[tmp.num] = tmp;
}
scanf("%d", &m);
for(int i=0;i<m;i++){
string num;
cin>>num;
if((mmap.find(num))!=mmap.end())
cout<<mmap[num].num<<" "<<mmap[num].name<<" "<<mmap[num].sex<<" "<<mmap[num].age<<endl;
else
cout<<"No Answer!"<<endl;
}
}
}
#include<iostream>
using namespace std;
struct student{
string num;
string name;
string sex;
int age;
};
int main(){
int n;
cin>>n;
student s[n];
for(int i=0;i<n;i++){
cin>>s[i].num>>s[i].name>>s[i].sex>>s[i].age;
}
int m;
cin>>m;
string v[m];
for(int i = 0;i<m;i++){
cin>>v[i];
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(v[i]==s[j].num){
cout<<s[j].num<<" "<<s[j].name<<" "<<s[j].sex<<" "<<s[j].age<<endl;
}
}
}
}//明明是对的 明明跟示例一模一样还不不通过 import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
HashMap<Integer, Student> map = new HashMap<>();
for (int i = 0; i < n; i++) {
int id = scanner.nextInt();
map.put(id,new Student(id,scanner.next(),scanner.next(),scanner.nextInt()));
}
int m = scanner.nextInt();
for (int i = 0; i < m; i++) {
Student student = map.get(scanner.nextInt());
if (student!=null) System.out.println(student);
else System.out.println("No Answer!");
}
}
public static class Student{
Integer id;
String name;
String sex;
Integer age;
public Student(Integer id, String name, String sex, Integer age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return id+" "+name+" "+sex+" "+age;
}
}
}