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

C++ 74제] vector 사용, 사칙연산 문제를 출제하시오.

by 건티 2022. 9. 10.
728x90

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

 

문제]

vector에 사칙연산자를 저장하고 연산자를 무작위로 산출하여 계산하는 프로그램을 작성하시오.

조건)

▶ 1~10000사이의 수는 더하기, 빼기연산자를 구하도록 하시오.
 2~19사이의 수는 곱하기, 나누기연산자를 구하도록 하시오.
 5문제를 맞추면 계속여부를 확인하시오.
 계속여부는 Y/y/N/n만 체크되도록 하시오.

 게임이 종료되면 그때까지의 총 출제된 문제와 맞춘 개수를 출력하시오.

 

출력 예)

6659-2937 = 3722

짝짝짝! 정답입니다.

 

2529-2744 = -215

짝짝짝! 정답입니다.

 

19*16 = 304

짝짝짝! 정답입니다.

 

2781+2401 = 5182

짝짝짝! 정답입니다.

 

18/7 = 2

짝짝짝! 정답입니다.

 

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

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

다시 입력하세요...

 

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

 

총 5문제 중 5개를 맞추었습니다.

수고하셨습니다.

 

참고풀이]

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

//1~10000사이의 수는 더하기, 빼기연산자를
//2~19사이의 수는 곱하기, 나누기연산자를 사용하여
//계산 결과값을 구하는 게임 프로그램을 작성하시오. 
//vector에 산술연산자 저장하고 무작위 산출하도록 한다.
int x;
int AddChk(int a, int b);
int SubChk(int a, int b);
int MulChk(int a, int b);
int DivChk(int a, int b);
void PrintOfResult(int n, int m);

int main()
{
   vector<char> v;//산술연산자 입력할 변수 
   int y;//임의의 수 발생 또는 맞은 개수 체크 변수 
   int tot;//총 발생된 문제의 개수 체크 변수 
   int i,j,k;//반복 또는 인덱스 변수
   int chk;//중복여부 체크, 또는 정답 변수 
   char ch;//계속여부 체크하는 변수 

   srand(time(NULL));

   //vector에 산술연사자를 넣는다.
   v.push_back('+');
   v.push_back('-');
   v.push_back('*');
   v.push_back('/');

   x=0;//맞은 개수를 센다
   tot=0;//출제된 전체 문제의 개수를 센다. 
   while(true)
   {
      k=rand()%4;
      if(v[k]=='+' || v[k]=='-')
      {
         //더하기, 뻬기 문제를 출제한다. 
         i=rand()%10000+1;
         j=rand()%10000+1;
      }
      else
      {
         //곱하기, 나누기 문제를 출제한다. 
         i=rand()%18+2;
         j=rand()%18+2;
      } 

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

      switch(v[k])
      {
         case '+': y=AddChk(i,j); break;
         case '-': y=SubChk(i,j); break;
         case '*': y=MulChk(i,j); break;
         case '/': y=DivChk(i,j); break; //나누기는 몫만 구한다. 
      }
      PrintOfResult(y,chk);

      //5개 맞추면 계속여부를 체크한다. 
      if(x>0 && 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총 " << tot << "문제 중 " << x << "개를 맞추었습니다.\n";
      cout << "수고하셨습니다." << endl;

      return 0;
}

void PrintOfResult(int n, int m)
{
   //정답여부를 체크한다.
   if(n == m)
   {
      x++;
      cout << "짝짝짝! 정답입니다.\n";
   }
   else
         cout << "아까비! 집중 화이팅!!\n";
}

int AddChk(int a, int b)
{
   return a+b;
}
int SubChk(int a, int b)
{
   return a-b;
}
int MulChk(int a, int b)
{
   return a*b;
}
int DivChk(int a, int b)
{
   return a/b;
}

 

참고풀이 결과]

 

 

 

 

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

 

반응형

댓글