PAT 1013Hashing (25)

来源:互联网 发布:淘宝的id在哪里看 编辑:程序博客网 时间:2024/05/16 09:09

思路

  • 判断msize是否为质数,如果不是给出大于他的最小的质数。
  • 如果n%msize这个坑已经被占满了,则找下一个坑n=n+i^2,直到i增加到m-1为止,如果还没有找到坑,则输出“-”。

我出错的一些点

  • 1.是n加一个数,不是除数加,弄到我浪费了好久
  • 2.我的天,1不是质数

代码

#include <iostream>#include <string>#include <vector>#include<math.h>using namespace std;vector<int> a;vector<bool> b;void hash_(int n,int maxsize){    int m = 0;    while (m < maxsize)    {        //是n加一个数,不是除数加,弄到我浪费了好久        int mp = (int)(n + pow(m, 2));        int np = mp % maxsize;        if (b[np])        {            m++;        }        else        {            b[np] = true;            //cout << "mp:" << mp << " np:" << np << endl;            //return np;            cout << np;            break;        }    }    //return -1;    if (m == maxsize)        cout << "-";}//我的天,1不是质数bool isP(int n){    //记住要小于等于号    if (n == 1)        return false;    for (int i = 2; i <= sqrt(n); i++)    {        if (n%i == 0)        {            //cout << "n" << n << "i" << i << endl;            return false;        }    }    return true;}int isPrim(int &n){    if (isP(n))    {        //cout << "isp" << endl;        return n;    }    else    {        int i = n + 1;        for (;; i++)        {            if (isP(i))                break;        }        //cout << 'i:' << i << endl;        return i;    }}int main(int argc, char** argv){    int msize, n;    cin >> msize>>n;    for (int i = 0; i < n; i++)    {        int k;        cin >> k;        a.push_back(k);    }    msize = isPrim(msize);    b.resize(msize,false);    for (int i = 0; i < a.size(); i++)    {        if (i==0)            hash_(a[i], msize);        else if (i < a.size())        {            cout << " ";            hash_(a[i], msize);        }    }    cout << endl;    //cout << "hash:" << hash_(a[2], msize);    return 0;}
0 0
原创粉丝点击