
**
思路:
- 定义结构体学生
struct Stu {
int flag = 0;//是否访问过
int ID = 0;//学生ID
};
2.用动态数组储存学生
vector<Stu> s;
3.对于每一个需要查找的ID进行遍历搜索
for (int i =0; i < Search; i++) {
int ID2;
scanf("%d",&ID2);
bool find = true;//是否存在
for (int j = 0; j < s.size(); j++) {
if(s[j].ID == ID2){
if(s[j].flag) printf("%04d: Checked\n",ID2);
else if(j == 0) printf("%04d: Mystery Award\n",ID2);
else if(IsPrime(j+1)) printf("%04d: Minion\n",ID2);
else printf("%04d: Chocolate\n",ID2);
s[j].flag = 1;//访问过
find = false;
}
}
if(find) printf("%04d: Are you kidding?\n",ID2);
}
**
注意事项
- 这里ID用 int 是因为 string 太慢了.第一次跑超时了
- 控制一个数字以4位输出
printf("%04d: Are you kidding?\n",ID2);
- 判断素数细节, i <= sqrt(num) 要带等号
bool IsPrime(int num){
for (int i = 2; i <= sqrt(num); i++)
if(num % i == 0)
return false;
return true;
}
最后附带一张Ace图片以及完整代码

在这里插入#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
struct Stu {
int flag = 0;//是否访问过
int ID = 0;
};
bool IsPrime(int num){
for (int i = 2; i <= sqrt(num); i++)
if(num % i == 0)
return false;
return true;
}
int main(){
vector<Stu> s;
int Nums;
cin>>Nums;
for (int i = 0; i < Nums; i++){
Stu sx;
scanf("%d",&sx.ID);
s.push_back(sx);
}
int Search;
cin>>Search;
for (int i =0; i < Search; i++) {
int ID2;
scanf("%d",&ID2);
bool find = true;//是否存在
for (int j = 0; j < s.size(); j++) {
if(s[j].ID == ID2){
if(s[j].flag) printf("%04d: Checked\n",ID2);
else if(j == 0) printf("%04d: Mystery Award\n",ID2);
else if(IsPrime(j+1)) printf("%04d: Minion\n",ID2);
else printf("%04d: Chocolate\n",ID2);
s[j].flag = 1;//访问过
find = false;
}
}
if(find) printf("%04d: Are you kidding?\n",ID2);
}
}
代码片
本文介绍了一种使用C++实现的学生ID查询系统,通过定义结构体存储学生信息,并利用动态数组进行高效的数据管理。文章详细解释了如何遍历搜索特定ID,根据不同条件输出相应的查询结果,同时提供了完整的代码示例和素数判断的细节。

被折叠的 条评论
为什么被折叠?



