zoukankan      html  css  js  c++  java
  • 715 QQ帐户的申请与登陆 (25分)

    这一题知识点与7-14基本上是一样的,都是用的散列。

    AC的代码:

    //将QQ号的类型从数字型改为字符串型后,成功AC。
    #include <iostream>
    #include <string>
    #include <cstring>
    using namespace std;
    long N;
    
    typedef struct user
    {
        char num[20];
        char pass[200];
        struct user* next;
    }node;
    typedef node* node_ptr;
    node_ptr* createtable(unsigned int size)
    {
        node_ptr* T = new node_ptr[N];
        for (unsigned int i = 0; i < size; i++)
        {
            T[i] = new node;
            T[i]->next = NULL;
        }
        return T;
    }
    typedef unsigned long long Index;
    Index hash_(char* key, unsigned int tablesize)
    {
        Index hash_val = 0;
        while (NULL != *(key+5))
        {
            hash_val = (hash_val << 5) + *(key++);
        }
        return hash_val % tablesize;
    }
    
    void apply(char* num, char* s2, node_ptr* T)
    {
        Index hash_val = hash_(num, N);
        node_ptr s = T[hash_val];
        while (NULL != s->next)
        {
            s = s->next;
            if (!strcmp(s->num,num))
            {
                cout << "ERROR: Exist" << endl;
                return;
            }
        }
        if (NULL == s->next)
        {
            node_ptr temp = new node;
            strcat(temp->num,num);
            strcpy(temp->pass, s2);
            temp->next = NULL;
            s->next = temp;
            cout << "New: OK" << endl;
            return;
        }
    }
    void login(char* num, char* s2, node_ptr* T)
    {
        Index hash_val = hash_(num, N);
        node_ptr s = T[hash_val];
        while (NULL != s->next)
        {
            s = s->next;
            if (!strcmp(s->num , num))
            {
                if (!strcmp(s->pass, s2))
                {
                    cout << "Login: OK" << endl;
                }
                else
                    cout << "ERROR: Wrong PW" << endl;
                return;
            }
        }
        if (NULL == s->next)
        {
            cout << "ERROR: Not Exist" << endl;
            return;
        }
    }
    int main()
    {
        cin >> N;
       char s1[20];
        char str2[200];
        node_ptr* T = createtable(N);
        char order;
        for (unsigned int i = 0; i < N; i++)
        {
            cin >> order;
            if (order == 'N')
            {
                cin >> s1;
                cin >> str2;
                apply(s1, str2, T);
            }
            else if (order == 'L')
            {
                cin >> s1;
                cin >> str2;
                login(s1, str2, T);
            }
        }
        return 0;
    }
  • 相关阅读:
    SWFObject2.0
    年轻人买房的问题
    百度知道的php爬虫
    PHP解决多进程同时读写一个…
    php快速定位多维数组的深度
    不要用充实的借口去浪费时间
    php跨服务器信息获取之cURL
    为你的生命多积累一些厚度
    看完一定让你很受益!
    phpQuery轻松采集网页内容
  • 原文地址:https://www.cnblogs.com/2020R/p/Hash.html
Copyright © 2011-2022 走看看