vector相关习题

问题A:学生课程列表

http://codeup.cn/problem.php?cid=100000596&pid=0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
类似于一个数据库你前面输入的数据都进到里面了。
你输入一个人,输出他对应的信息。

用一个int型的vector,再先将字符串转换成对应的数值id用定址法统计。

#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
vector<int> stu[175761];//即学生编号数26*26*26*10+1
int str_int(char a[])
{
    
    
	int sum=0;
	for(int i=0;i<3;i++)
	{
    
    
		sum=sum*26+a[i]-'A';
	}
	sum=sum*10+a[3]-'0';
	return sum;
}
int main(void)
{
    
    
	int people,book;
	int number,n;
	char name[20];
	cin>>people>>book;
	while(book)
	{
    
    
		cin>>number>>n;
		for(int i=0;i<n;i++)
		{
    
    
			scanf("%s",name);
			stu[str_int(name)].push_back(number);
		} 
		book--;
	}
	while(people)
	{
    
    
		scanf("%s",name);
		printf("%s ",name);
		printf("%d",stu[str_int(name)].size());
		sort(stu[str_int(name)].begin(),stu[str_int(name)].end());
		for(int i=0;i<stu[str_int(name)].size();i++)
		{
    
    
			printf(" %d",stu[str_int(name)][i]);	
		}
		printf("\n");
		people--;
	}
	return 0;
} 

问题B:课程学生名单

http://codeup.cn/problem.php?cid=100000596&pid=1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题目分析:
在这里插入图片描述
用一个vector的容器数组 来保存各个的人名。
用定址法,看到学生选的编号,就向对应的容器加入。
最后挨个输出。输出前要按字典序排序,自己写一个cmp 用sort排

#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(string a,string b)
{
    
    
	return a<b;
}
int main(void)
{
    
    
	int people,book;
	int i,j,k;
	int n;//每一个人选的科目书 
	int number;//选的科目号 
	string str;
	vector<string> peoples[2505];
	cin>>people>>book;
	for(i=0;i<people;i++)
	{
    
    
		cin>>str;
		scanf("%d",&n);
		for(int j=0;j<n;j++)
		{
    
    
			scanf("%d",&number);
			peoples[number].push_back(str); 
		} 
	}
	for(i=1;i<=book;i++)
	{
    
    
		printf("%d %d\n",i,peoples[i].size());
		sort(peoples[i].begin(),peoples[i].end(),cmp);
		for(j=0;j<peoples[i].size();j++)
		{
    
    
			cout<<peoples[i][j]<<endl; 
		}
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/115133580