题目:
最近,小明开始班级大搜索,他已经知道了班级里每个人的年龄,并且把他们排成了一队,他将从排好队的人里按顺序把和自己同龄的人找出来,并请这些同龄人出队。
输入格式:
第一行输入一个N(0<n<100)表示有N个学生;
接下来有N行,每行两个数据,分别表示某个同学的名字和年龄;
最后一行包含一个整数,表示小明的年龄。
输出格式:
输出仅一行,包含若干学生的姓名,姓名与姓名之间用空格分隔,最后一个名字的末尾没有空格。表示小明的同龄者出队后,队伍中学生的排序。
输入样例:
3
张三 20
李四 22
王五 15
22
输出样例:
张三 王五
题意分析:
找出和小明同龄的人,并将其他人按顺序输出。
解题思路:
使用结构体存储队列里每个人的名字和年龄,然后循环进行判断,如果同龄不输出,非同龄则输出名字。
具体算法流程:
首先输入n,然后循环n次输入每个人的名字和年龄,最后输入b小明自己的年龄。接着进行循环,如果年龄和小明相同则不输出,年龄和小明不同则输出。(写完之后会发现输出的格式不正确,多出一行换行)此时对代码进行修改,先循环一遍判断有多少个人应该被输出,然后再循环进行输出,使用ans变量作为计数器,当输出到最后一行时不在换行。
实现细节(代码):
#include<bits/stdc++.h>
using namespace std;
int n,ans;
struct st {
string name;
int age;
int t;
} a[105];
int b;
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
cin>>a[i].name>>a[i].age;
}
cin>>b;
for(int i=1; i<=n; i++) {
if(a[i].age!=b) {
a[i].t=1;
ans++;
}
}
for(int i=1; i<=n; i++) {
if(a[i].t==1) {
if(ans==1) {
cout<<a[i].name;
} else {
cout<<a[i].name<<" ";
ans--;
}
}
}
return 0;
}
总结:
要注意题目中样例的输出格式,避免答案的格式错误造成不必要的失分。结构体的定义要准确,不要写错。