본문 바로가기
프로그램/C++ 1000제

C++ 44제] vector 사용, 다음 조건에 맞는 소수를 출력하시오.

by 건티 2022. 6. 13.
728x90

출처 : 반크_세계유산 석굴암

 

문제]

다음 조건에 맞는 프로그램을 작성하시오.

조건)

1. 키보드로 임의의 정수를 입력하시오.

2. 입력한 수까지의 소수를 모두 출력하시오.

3. 입력한 수까지의 소수의 개수를 구하시오.

4. 소수는 한 라인에 10개씩 일정하게 출력하도록 하시오.

5. 계속할 것인지의 여부를 물어 프로그램을 종료하시오.

6. 대소문자 구분없이 작업하시오.

 

출력 예)

임의의 정수를 입력하시오 : 10

1에서 10까지 소수는 아래와 같습니다.

2 3 5 7

소수의 개수는 4개입니다.

 

계속하시겠습니까?(y/n) Y

 

임의의 정수를 입력하시오 : 50

1에서 50까지 소수는 아래와 같습니다.

   2   3   5   7 11 13 17 19 23 29

 31 37 41 43 47

소수의 개수는 15개입니다.

 

계속하시겠습니까?(y/n) n

수고하셨습니다.

 

참고풀이]

#include <iostream>
#include <vector>
#include <iomanip>//setw()
#include <string>
using namespace std;

int JariSu(int n)
{
   int x,y;
   for(x=y=1;y<=n;y*=10) x++;
   return x;
}

int main()
{
   vector<int> v;//소수값을 넣을 vector를 선언한다.
   int N;//임의의 자연수 변수
   int i,j;//인덱스 또는 반복변수
   int J;//일정하게 출력할 자리수변수 
   char ch;//계속여부 체크변수

   while(1)
   {
      cout << "임의의 정수를 입력하시오 : ";
      cin >> N;

      //소수값을 vector에 넣는다.
      for(i=1;i<=N;i++)
      {
         for(j=2;j<i;j++)
            if(i%j==0) break;
         if(i==j)
            v.push_back(i);
      }

      //소수값과 개수를 출력한다.
      cout << "1에서 " << N <<"까지 소수는 아래와 같습니다.\n";
      J=JariSu(N);
      for(i=0;i<v.size();i++)
      {
         cout << setw(J);
         if((i+1)%10==0) cout << v[i] << endl;
         else cout << v[i];
      }
      cout << "\n소수의 개수는 " << v.size() << "개입니다.\n";

      //계속여부 체크부분
      cout << "\n계속하시겠습니까?(y/n) ";
      cin >> ch;
      if(tolower(ch)=='n') break;

      v.clear();//vector의 내용을 모두 삭제한다. 
      cout<<endl;
   }
   cout << "수고하셨습니다.\n";

   return 0;
}

 

참고풀이 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

반응형

댓글