프로그래밍 문제 - 질량 및 질량 쌍

내용은 계속 업데이트됩니다. 잘못된 점이 있으면 바로잡아 주십시오. 감사합니다!
질문 1
완벽한 세계 2017년 필기시험 문제: n보다 작은 모든 질수를 찾아내는 프로그램을 작성한다.
분석하다.
소수
질수는 자신의 질수보다 작은 것에 대해 나머지를 구하고 0과 같지 않다.자신의 질수보다 작은 범위는 [2,sqat(i)]이다.
코드
#include 
#include 
#include 
using namespace std;

vector<int> res;
vector<int> CalP(int n)
{
    if(n<2)
        return res;
    res.push_back(2);
    int i,j;
    for(i=3;i<=n;++i)
    {
        for(j=0;jsqrt(i);++j)
        {
            if(i%res[j]==0)
                break;
        }
        if(j==res.size()||res[j]>sqrt(i))
            res.push_back(i);
    }
    return res;
}

질문 2
텐센트 2017년 필기시험문제: 정정수를 정하고 컴파일러가 얼마나 많은 대질수와 입력된 이 정정수를 계산하여 결과를 출력한다.입력 값이 1000보다 작습니다.만약 10을 입력하면 프로그램은 결과를 2로 출력해야 한다.(총 두 쌍의 질수의 합은 10으로 각각(5,5),(3,7)
입력 설명: 입력은 정수 n을 포함합니다(3≤n <1000).
출력 설명: 출력 대수
입력 예: 10
출력 예: 2
분석하다.
어떤 합수(비질수이며 1이 아니며 0이 아니다)도 두 질수를 덧붙일 수 있다.
단계:
4
  • 먼저 1000 이내의 질수를 구하여vector용기에 보관한다

  • 4
  • 입력한 것이sum라고 가정하면 그 중의 한 질수의 수치 범위[2,sum/2], 다른 질수의 수치 범위[sum/2,sum-2]이다.또는 앞뒤 두 개의 커서를 직접 이용하여 중간으로 끊임없이 가까이 옮겨다니면 최종 대수를 구할 수 있다

  • 사용된 데이터 구조:vector
    코드
    #include 
    #include 
    #include 
    using namespace std;
    
    // 1000        
    int i,j;
    void GetPrime(vector<int>& primeNum)
    {
        primeNum.push_back(2);
        for(i=3;i<1000;++i)
        {
            for(j=0;jsqrt(i);++j)
            {
                if(i%j==0)
                    break;
            }
            if(isPrime)
                primeNum.push_back(i);
            if(j==primeNum.size()||primeNum[j]>sqrt(i))
                primeNum.push_back(i);
        }
    }
    
    //  sum primeNum,        
    int PrimePair(int sum)
    {
        vector<int> primeNum;
        GetPrime(primeNum);
        int resCount=0;
    
         /*    
        int midVal=0;
        for(i=0;primeNum[i]<=sum/2;++i)
        {
            midVal=i;
        }
        for(i=0;primeNum[i]<=sum/2;++i)
        {
            for(j=midVal;primeNum[j]<=sum-2;++j)
            {
                if(primeNum[j]+primeNum[i]==sum)
                    ++resCount;
            }
        }
        return resCount;
        */
    
        //     :   。   ,      。。。
        vector<int>::iterator leftIter = primeNum.begin();
        vector<int>::iterator rightIter = primeNum.end()-1;
        while(leftIter<=rightIter)
        {
            if((*leftIter+*rightIter)==sum)
            {
                ++resCount;
                ++leftIter;
                --rightIter;
            }
            else if((*leftIter+*rightIter)>sum)
                --rightIter;
            else
                ++leftIter;
        }
        return resCount;
    }
    
    int main()
    {
        int sum=0;
        while(cin>>sum)
        {
            if(sum<=3||sum>=1000)
            {
                cout<<0<continue;
            }
            cout<return 0;
    }

    좋은 웹페이지 즐겨찾기