洛谷 P3156 【深基15.例1】询问学号

【题目链接】

洛谷 P3156 【深基15.例1】询问学号

【题目考点】

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 2106,必须将数组设为全局变量。

解法2:填充数组

每输入一个学生的学号,将其填充至数组a。填充为下标从1开始的数组。而后输入x,输出a[x]

解法3:使用vector

每输入一个学生的学号,将其添加进vector。vector下标从0开始,第x个学生的学号在vector中下标为x-1。

【题解代码】

解法1:使用从1开始的数组

#include 
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
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
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;
}

你可能感兴趣的:(洛谷题解,c++,算法,数据结构)