【题目链接】
【题目考点】
1. 数组
2. 数组填充
将数值d填充到数组a,数组a中元素数量为an,an初值为0。
- 填充至下标0到an-1:
a[an++] = d
- 填充至下标1到an:
a[++an] = d
2. vector
【解题思路】
解法1:使用从1开始的数组
设数组a,a[i]
表示第i个学生的学号。而后进行m次询问,输入x,输出a[x]
。
【注意】学生数量达到
2
∗
1
0
6
2*10^6
2∗106,必须将数组设为全局变量。
解法2:填充数组
每输入一个学生的学号,将其填充至数组a。填充为下标从1开始的数组。而后输入x,输出a[x]
。
解法3:使用vector
每输入一个学生的学号,将其添加进vector。vector下标从0开始,第x个学生的学号在vector中下标为x-1。
【题解代码】
解法1:使用从1开始的数组
#include <bits/stdc++.h>
using namespace std;
int a[2000005];//a[i]:第i个进入教室的学生的学号
int main()
{
int n, m, x;
cin >> n >> m;
for(int i = 1; i <= n; ++i)
cin >> a[i];
while(m--)
{
cin >> x;//询问第x个进入教室的同学的学号
cout << a[x] << endl;
}
return 0;
}
解法2:数组填充
#include<bits/stdc++.h>
using namespace std;
int a[2000005], ai;
int main()
{
int n, m, v, x;
cin >> n >> m;
for(int i = 1; i <= n; ++i)
{
cin >> v;
a[++ai] = v;//填充数值v到数组a
}
for(int i = 1; i <= m; ++i)
{
cin >> x;
cout << a[x] << endl;
}
return 0;
}
解法3:使用vector
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m, a, x;
vector<int> vec;
cin >> n >> m;
for(int i = 1; i <= n; ++i)
{
cin >> a;
vec.push_back(a);
}
for(int i = 1; i <= m; ++i)
{
cin >> x;
cout << vec[x-1] << endl;
}
return 0;
}