Hash散列——1038 统计同成绩学生(20)

本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:

输入在第1行给出不超过10^5^的正整数N,即学生总人数。随后1行给出N名学生的百分制整数成绩,中间以空格分隔。最后1行给出要查询的分数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。

输出格式:

在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

输入样例:

10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出样例:

3 2 0
#include<iostream>
using namespace std;
int n[100];

int main()
{
	int N;
	int a[100000];
	int K;
	int score;

	cin >> N;
	for (int i = 0; i < N; i++)
		cin >> a[i];
	cin >> K;

	int flag = 0;
	for (int i = 0; i < K; i++)
	{
		cin >> score;
		for (int j = 0; j < N; j++)
		{
			if (score == a[j])
				n[score]++;
		}
		if (flag == 1)
			cout << " ";
		cout << n[score];
		flag = 1;
	}

	system("pause");
	return 0;
}

运行超时... 

巧妙运用散列

#include<iostream>
using namespace std;
int a[101];

int main()
{
	int N;
	int K;
	int score;

	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> score;
		a[score]++;
	}
	cin >> K;
	int flag = 0;
	for (int i = 0; i < K; i++)
	{
		cin >> score;
		if (flag==1)
			cout << " ";
		flag = 1;
		cout << a[score];
	}

	system("pause");
	return 0;
}

还是运行超时...

#include<iostream>
using namespace std;
int a[101];

int main()
{
	int N;
	int K;
	int score;

	scanf("%d", &N);//cin >> N;
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &score);
		a[score]++;
	}
	scanf("%d", &K);//cin >> K;
	int flag = 0;
	for (int i = 0; i < K; i++)
	{
		scanf("%d", &score);
		if (flag == 1)
			printf(" ");// cout << " ";
		flag = 1;
		printf("%d", a[score]);
	}

	system("pause");
	return 0;
}

改成scanf和printf就可以了...

数组a也可以是vector。

猜你喜欢

转载自blog.csdn.net/qq_39119348/article/details/81774153