1.首先需要找打大于600000的最大素数,寻找素数的方法,我用的是比较笨的方法,就是用x的平方根以下的数y去除,若x%y全部都不为0,则为素数。
2.对每一个菜谱进行编码,我的编码方法如下,具体的编码方法大家可以随意!
int hashcode(char be_hash[40])
{
int length= strlen(be_hash);
int num = 0;
for (auto i = 0; i < length; i++)
{
num += (be_hash[i] - 96)*(i+1);
}
return num;
}
3.每输入一个菜谱,进行一次检查,检查的结果为result。
若从来没有输入,则result.bool_value=1;然后将值添加入链表数组中。
(这里需要注意的是,如果hashcode计算得到的值相同,则需要遍历链表以判断是否重复)
4.在检查时,会使result.chongfu++,然后通过这个来判断重复了几次,若重复了超过1次,chongfu的值会大于1.这时候重复的数值就不能加入rept_hash链表中。
5.最后遍历rept_hash链表,输出即可!
最后附上代码!
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<string.h>
#define maxn 799999
usin