zoukankan      html  css  js  c++  java
  • noi 第n小的质数

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    输入一个正整数n,求第n小的质数。

    输入
    一个不超过10000的正整数n。
    输出
    第n小的质数。
    样例输入
    10
    样例输出
    29

    一定要注意范围范围范围!!!!
    开数组一定要注意!!!!!!
    第一次很装逼的用了结构体,毕竟是会的东西之一,结果:
    Runtime Error
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define M 10001
    
    using namespace std;
    int n;
    struct Q{
        int top;
        int s[M];
        void jiajia()
        {
            top++;
        }
        int add(int x)
        {
            s[top]=x;
        }
        Q()//初始化 
        {
            top=0;
        }
    }q;
    
    int pd(int x)
    {
        if(x==2||x==3) return 1;
        if(x%2==0 || x==1) return 0;
        int j=3;
        while(j<=sqrt(x)&&x%j!=0) j+=2;
        if(x%j==0) return 0;
        else return 1;
    }
    
    void Q_work()
    {
        q.jiajia();
        q.add(2);
        for(int i=3;;i++)
        { 
            if(pd(i))
            {
                q.jiajia();
                q.add(i);
            }  
            if(q.top>10000)  
            break;  
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        Q_work();
        cout<<q.s[n];
        return 0;
    }
    1

    吓的我赶紧改掉结构体里面的初始化,样例过了???

    交上:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define M 10001
    
    using namespace std;
    int n;
    struct Q{
        int top;
        int s[M];
        void jiajia()
        {
            top++;
        }
        int add(int x)
        {
            s[top]=x;
        }
    }q;
    
    int pd(int x)
    {
        if(x==2||x==3) return 1;
        if(x%2==0 || x==1) return 0;
        int j=3;
        while(j<=sqrt(x)&&x%j!=0) j+=2;
        if(x%j==0) return 0;
        else return 1;
    }
    
    void Q_work()
    {
        q.jiajia();
        q.add(2);
        for(int i=3;;i++)
        { 
            if(pd(i))
            {
                q.jiajia();
                q.add(i);
            }  
            if(q.top>10000)  
            break;  
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        Q_work();
        printf("%d",q.s[n]);
        return 0;
    }
    2

    还是不对???

    然后删掉结构体:

    A了……

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #define M 10001
    
    using namespace std;
    
    int n,top;
    int s[M];
    
    int pd(int x)
    {
        if(x==2||x==3) return 1;
        if(x%2==0 || x==1) return 0;
        int j=3;
        while(j<=sqrt(x)&&x%j!=0) j+=2;
        if(x%j==0) return 0;
        else return 1;
    }
    
    void Q_work()
    {
        s[++top]=2;
        for(int i=3;;i++)
        { 
            if(pd(i))
            {
                s[++top]=i;
                i++;
            }  
            if(top>10000)  
            break;  
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        Q_work();
        printf("%d",s[n]);
        return 0;
    }
    3

    然而想不通的是:为什么不能使用结构体??

    赶紧请教大佬,结果出人意料的错误出现了,详细请看代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    //#define M 10001就是这里!!数组开小了应该再加一!!! 
    #define M 10002
    
    using namespace std;
    
    int n;
    
    struct Q{
        int top;
        Q()
        {
            top=0;
        }
        int s[M];
        void jiajia()
        {
            top++;
        }
        int add(int x)
        {
            s[top]=x;
        }
    }q;
    
    int pd(int x)
    {
        if(x==2||x==3) return 1;
        if(x%2==0 || x==1) return 0;
        int j=3;
        while(j<=sqrt(x)&&x%j!=0) j+=2;
        if(x%j==0) return 0;
        else return 1;
    }
    
    void Q_work()
    {
        q.jiajia();
        q.add(2);
        for(int i=3;;i++)
        { 
            if(pd(i))
            {
                q.jiajia();
                q.add(i);
            }  
            if(q.top>10000) //因为结束条件是q.top>10000所以需要使用到10001个,所以数组需要开到10002 
            //if(q.top>=10000) 或者上面不改,改这里 
            break;  
        }
    }
    
    int main()
    {
        scanf("%d",&n);
        Q_work();
        printf("%d",q.s[n]);
        return 0;
    }
    4

    End.

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    HDU 4388 To the moon
    HDU 4757 Tree
    HDU 5816 Hearthstone
    hihocoder 1356 分隔相同整数
    HDU 5726 GCD
    POJ3026 Borg Maze(Prim)(BFS)
    POJ1258 Agri-Net(Prim)
    POJ1751 Highways(Prim)
    POJ2349 Arctic Network(Prim)
    POJ1789 Truck History(Prim)
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6734834.html
Copyright © 2011-2022 走看看