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

C++ 52제] vector 사용, 최대값과 최소값의 차를 구하시오.

by 건티 2022. 6. 21.
728x90

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

 

문제]

중복되지 않은 2자리 자영수를 무작위로 10개 발생하여 가장 작은 수와 가장 큰 수의 차를 구하는 프로그램을 작성하시오.

 

출력 예)

2자리 자연수는 17 80 96 50 58 37 52 66 90 25 이며,

그 중 가장 작은 수는 17이고, 가장 큰 수는 96이면

두 수의 차는 79입니다.

 

참고풀이]

#include <iostream>
#include <vector>
#include <stdlib.h> //srand(),rand()
#include <time.h> //time()
#include <algorithm> //min(), max()
using namespace std;

vector<int> v;

//중복여부 체크함수
bool Check(int x,int n)
{
   int j;
   for(j=0;j<n;j++)
      if(v[j]==x) return false;
   return true;
}

int main()
{
   int i;//반복 또는 인덱스변수 
   int a;//입력변수
   int Min,Max;//최소값과 최대값 변수 
   bool chk;//중복여부 체크변수 

   //무작위 수 발생 초기값을 설정한다.
   srand(time(NULL));

   //중복되지 않는 2자리 자연수 10개를 vector에 넣는다.
   for(i=0;i<10;i++) 
   {
      if(i==0) a=rand()%90+10;
      else
         while(1)
         {
            a=rand()%90+10;
            //발생된 자연수가 중복되었는 지 체크한다. 
            chk=Check(a,i);
            //발생된 자연수가 중복되지 않았다면 작업을 끝낸다. 
            if(chk) break;
         }
      v.push_back(a);
   }

   //최소값과 최댁값을 구한다.
   Max=Min=v[0];
   for(i=1;i<10;i++)
   {
      Min=min(Min,v[i]);
      Max=max(Max,v[i]);
   }

   //결과출력
   cout << "2자리 자연수는 ";
   for(i=0;i<10;i++) cout << v[i] << " ";
   cout << "이며,\n그 중 가장 작은 수는 ";
   cout << Min << "이고, 가장 큰 수는 ";
   cout << Max << "이며\n두 수의 차는 ";
   cout << Max-Min << "입니다.\n";

   return 0;
}

 

참고풀이 결과]

 

 

 

 

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

 

반응형

댓글