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