输入的第一行为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; } } }