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

C++ 73제] vector 사용, 더하기 문제를 출제하시오.

by 건티 2022. 9. 6.
728x90

출처 : 반크_세계유산 창덕궁

 

문제]

10~99사이의 수를 중복되지 않게 vector에 넣고  그 vector의 값으로 더하기 문제를 출제하시오. 

조건)

10~99의 수는 랜덤으로 vector에 넣으시오.

▶ 문제는 5문제를 맞출 때까지 출제되도록 하시오.

5문제를 맞추면 계속여부를 확인하시오.

계속여부는 Y/y/N/n만 체크되도록 하시오.

그만하면 그때까지의 맞춘 개수를 출력하시오.

 

출력 예)

76 + 71 = 147

OK! 정답입니다.

 

91 + 84 = 175

OK! 정답입니다.

 

70 + 14 = 84

아까비! 집중해 보세요.

 

45 + 36 = 81

OK! 정답입니다.

 

49 + 64 = 133

OK! 정답입니다.

 

96 + 64 = 160

OK! 정답입니다.

 

계속하시겠습니까?(Y/N) p

Y/y/N/n만 입력하세요.

다시 입력하세요...

 

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

 

총 5개를 맞추었습니다.

수고하셨습니다.

 

참고풀이]

#include <iostream>
#include <vector>
#include <cstdlib> //srand(), rand()
#include <ctime> //time()
#include <cctype> //toupper()
using namespace std;

//10~99사이의 중복되지 않는 수를  vector에 넣고 그 vector의 값으로 더하기 문제를 출제하시오. 
int main()
{
   vector<int> v;//10~99 사이 수를 넣을 vector변수
   int x;//임의의 수 발생 또는 맞은 개수 체크 변수 
   int i,j;//반복 또는 인덱스 변수
   int chk;//중복여부 체크, 또는 정답 변수 
   char ch;//계속여부 체크하는 변수 

   

   //실행할 때 마다 임의의 수를 발생하도록 초기값을 설정한다.
   srand(time(NULL));

   //10~99사이의 수를 vector에 중복되지 않게 넣는다.
   x=rand()%90+10;
   v.push_back(x);
   for(i=1;i<90;i++) 
   {
      x=rand()%90+10;
      chk=1;
      for(j=0;j<i;j++)
         if(x==v[j])
         {
            chk=0;
            break;
         }
      if(chk) v.push_back(x); else i--;
   }

   x=0;//맞은 개수를 센다
   while(true)
   {
      //더하기 문제를 출제한다. 
      i=rand()%90;
      j=rand()%90;

      cout << v[i] << " + " << v[j] << " = ";
      cin >> chk;

      //정답여부를 체크한다.
      if(v[i]+v[j] == chk)
      {
         x++; //맞은 개수를 센다.
         cout << "OK! 정답입니다.\n";
      }
      else
         cout << "아까비! 집중해 보세요.\n";

      //맞춘 개수가 5의 배수가 되면 계속여부를 체크한다. 
      if(x%5==0)
      {
         //계속여부를 체크한다.
         while(true)
         {
            cout << "\n계속하시겠습니까?(Y/N) ";
            cin >> ch;
            if(toupper(ch)=='Y' || toupper(ch)=='N') break;
            cout << "Y/y/N/n만 입력하세요.\n";
            cout << "다시 입력하세요...\n";
         }
         if(toupper(ch)=='N') break;
      }
      cout << endl;
   }

   cout << "\n총 " << x << "개를 맞추었습니다.\n";
   cout << "수고하셨습니다." << endl;

   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

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

 

반응형

댓글