1078 Hashing (25point(s)) Easy only once *哈希表的问题,散列表取值范围

基本思想:

主要是hash表中的平方探测法得问题;

 

关键点:

注意一个问题,平方探测法并不能完美解决散列问题;

并且在这个题目中,平方探测法的step取值为step=1*1,2*2,.....,(n-1)*(n-1),其中n为散列表长度;

 

#include
#include
#include
#include 
#include
#include
#include
#include
using namespace std;
using std::vector;

const int maxn = 11111;
vectorvec;
bool ar[maxn];

bool isprime(int n) {
	if (n == 0 || n == 1)
		return false;
	for (int i = 2; i <= int(sqrt(n)); i++) {
		if (n%i == 0) {
			return false;
		}
	}
	return true;
}

int main() {
	fill(ar,ar+maxn,false);
	int s, n;
	int m;
	scanf("%d %d", &n, &s);
	for (int i = 0; i < s; i++) {
		scanf("%d", &m);
		vec.push_back(m);
	}
	while (!isprime(n)) {
		n++;
	}
	//cout << "n->" << n << endl;
	for (int i = 0; i < vec.size(); i++) {
		int nt = vec[i];//各个元素
		int index = nt % n;
		if (!ar[index]) {
			ar[index] = true;
			if (i == 0)
				printf("%d", index);
			else
				printf(" %d", index);
			//cout <<999 <" << index<= n) {
				if (i == 0)
					printf("-");
				else
					printf(" -");
			}
		}
	}
	system("pause");
	return 0;
}

  

你可能感兴趣的:(1078 Hashing (25point(s)) Easy only once *哈希表的问题,散列表取值范围)