출처 : 반크_세계유산 창덕궁
문제]
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;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 가을
'프로그램 > C++ 1000제' 카테고리의 다른 글
C++ 76제] 어서와 C++는 처음이지! p104 도전문제 2. (0) | 2022.09.11 |
---|---|
C++ 75제] 어서와 C++는 처음이지! p104 도전문제1 (0) | 2022.09.11 |
C++ 73제] vector 사용, 더하기 문제를 출제하시오. (0) | 2022.09.06 |
C++ 72제] vector 사용, 영문 문장의 첫글자를 대문자로 변환하기. (0) | 2022.08.24 |
C++ 71제] vector사용, 영문 문자열을 문장 단위로 출력하기. (0) | 2022.08.23 |
댓글