프로그래밍 문제 - 질량 및 질량 쌍
6042 단어 프로그래밍 문제 연습
질문 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
4
사용된 데이터 구조: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;
}