[ 사각형과 점과의 거리 ]

 

사각형과 점과의 거리 2차원 평면 상에서 두 점 p(x1, y1), q(x2, y2) 사이의 직선거리(Euclidean distance) d2(p,q)와 직각 거리(rectilinear distance) d1(p,q)는 다음과 같이 정의한다.

예를 들어, 두 점 (2, 3), (5, 7) 의 직선거리는 5이며, 직각거리는 |2-5|+|3-7|=3+4=7 이다.

또한, 직사각형과 점과의 직선거리, 직각거리는 이 점과 직각사각형에 있는 어떠한 점과의 각각 직선거리, 직각거리 중에서 가장 가까운 거리로 정의한다.

단, 점이 직사각형의 내부와 변 위에 위치하는 경우에, 점과 직사각형의 직선거리와 직각거리는 모두 0 으로 정의한다.

 

예를 들어, 위 그림에서 점 p, q 와 사각형과의 직선거리와 직각거리는 모두 0 이다.

그리고, 점 r, s, t와 사각형과의 직선거리의 제곱은 각각 4, 13, 9이며, 점 r, s, t와 사각형과의 직각거리는 각각 2, 5, 3이다.

 

직사각형과 한 개의 점이 주어졌을 때, 이들 사이의 직선거리의 제곱과 직각거리를 계산하는 프로그램을 작성하시오.

 

입력

입력은 표준입력(standard input)을 사용한다.

입력은 t 개의 테스트 케이스로 주어진다.

입력 파일의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다.

두 번째 줄부터 두 개의 줄마다 한 개의 테스트 케이스에 해당하는 데이터가 입력된다.

각 테스트 케이스의 첫 번째 줄에는 사각형의 위치에 대한 데이터가 나타나며, 두 번째 줄에는 한 점의 좌표가 나타난다.

사각형의 위치는 네 개의 정수 x1 y1 x2 y2 (0 x1 < x2 ≤  1,000, 0 y1 < y2  1,000) 로 표시되며, (x1, y1) 은 사각형의 왼쪽 아래 꼭지점의 좌표이며, (x2, y2) 는 사각형의 오른쪽 위 꼭지점의 좌표이다.

두 번째 줄에 나타나는 점의 좌표는 두 개의 정수 x y (0 x, y  1,000) 로 표시되며 (x, y) 가 그 점의 좌표이다.

입력되는 각 정수 사이에는 한 개의 공백이 있으며, 잘못된 데이터가 입력되는 경우는 없다. 

 

출력

출력은 표준출력(standard output)을 사용한다.

입력되는 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트 케이스의 결과를 출력한다.

각 테스트 케이스의 출력되는 첫 줄에 입력되는 사각형과 점과의 직선거리의 제곱을 나타내는 정수와 직각거리를 나타내는 정수를 순서대로 출력한다.

두 정수 사이에는 한 개의 공백을 둔다.

 

입력과 출력의 예

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# include <iostream>
# include <math.h>
# include <stdlib.h>
using namespace std;
 
int main(){
  int t;
  cin >> t;
 
  for(int i = 0; i < t; i++)
  {
    int x1, y1, x2, y2, x, y, X, Y;
    int distance1 = 0, distance2 = 0;
    cin >> x1 >> y1 >> x2 >> y2 >> x >> y;
 
    if((x >= x1) && (x <= x2) && (y >= y1) && (y <= y2))
    {
      cout << 0 << " " << 0 << endl;
    }
    else
    {
      if((x >= x1) && (x <= x2) && (y > y2))
        X = x, Y = y2;
      else if((x >= x1) && (x <= x2) && (y < y2))
        X = x, Y = y1;
      else if((y >= y1) && (y <= y2) && (x > x2))
        X = x2, Y = y;
      else if((y >= y1) && (y <= y2) && (x < x1))
        X = x1, Y = y;
      else if((x > x2) && (y > y2))
        X = x2, Y = y2;
      else if((x > x2) && (y < y1))
        X = x2, Y = y1;
      else if((x < x1) && (y > y2))
        X = x1, Y = y2;
      else
        X = x1, Y = y1;
      distance1 = pow(x - X, 2+ pow(y - Y, 2);
      distance2 = abs(x - X) + abs(y - Y);
      cout << distance1 << " " << distance2 << endl;
    }
  }
  return 0;
}
cs

'Programming Language > C++' 카테고리의 다른 글

[c++] 삼각형 면적  (0) 2020.10.31
[c++] 삼각형의 종류 (2)  (0) 2020.10.31
[c++] 삼각형의 종류 (1)  (0) 2020.10.31
[c++] 수직/수평 선분의 교차  (0) 2020.10.31
[c++] 끝자리 숫자 계산하기  (0) 2020.10.31

[ 삼각형 면적 ]

 

2차원 평면에서 세 개의 점 A(ax, ay), B(bx, by), C(cx, cy)로 만들어지는 삼각형 △ABC 의 면적 Area(ABC)은 다음과 같은 3x3 행렬의 행렬식(determinant)을 이용하여 계산할 수 있다.

위 삼각형의 면적을 구하는 식 SignedArea(ABC)의 값은 양수, 음수, 혹은 0이 될 수 있다.

이 식 SignedArea(ABC)의 값이 양수가 되는 경우는 아래 왼쪽 그림에서와 같이 세 점 A, B, C 가 반시계 방향의 순서로 놓여져 있는 경우이고, SignedArea(ABC)의 값이 음수가 되는 경우는 아래 가운데 그림에서와 같이 세 점 A, B, C가 시계 방향의 순서로 놓여져 있는 경우이다.

또한 SignedArea(ABC)의 값이 0인 경우는 세 점 A, B, C가 같은 직선 상에 놓여져 있는 경우이다.

2차원 평면에서 세 점 A, B, C 의 좌표가 주어졌을 때, 이 세 점에 의해서 만들어지는 삼각형 의 면적의 2배를 계산하고, 주어진 세 점 A, B, C 가 시계 방향으로 놓여져 있는 지, 반시계 방향으로 놓여져 있는 지, 혹은 같은 직선 상에 놓여져 있는 지를 판별하는 프로그램을 작성하시오.

 

예를 들어, 세 점 A(1, 1), B(1, 5), C(4, 1)에 의하여 만들어지는 삼각형의 면적의 2 배는 위 식에 의하여,

이므로, 면적의 2배 값은 12 이다.

또한, 위 식에서 SignedArea(ABC)의 값이 음수이므로, 세 점 A, B, C 는 시계 방향의 순서로 놓여져 있음을 알 수 있다.

 

 

입력

입력은 표준입력(standard input)을 사용한다.

입력은 t 개의 테스트 케이스로 주어진다.

입력 파일 의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다.

두 번째 줄부터 t 개의 줄에는 한 줄에 한 개의 테스트 케이스에 해당하는 세 점의 좌표를 나타내는 여섯 개의 정수 ax ay bx by cx cy ( -100 ax,ay,bx,by,cx,cy ≤ 100 )가 입력된다.

연속된 두 개의 정수는 세 점 A(ax, ay), B(bx, by), C(cx, cy)의 좌표를 나타낸다.

각 정수들 사이에는 한 개의 공백이 있으며, 잘못된 데이터가 입력되는 경우는 없다.

또한, 입력되는 두 꼭지점의 좌표가 같은 경우는 없다.

 

출력

출력은 표준출력(standard output)을 사용한다.

입력되는 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트 케이스의 결과를 출력한다.

각 테스트 케이스에 해당하는 출력의 첫 줄에 입력되는 세 점 A, B, C에 의하여 만들어지는 삼각형 면적의 2배를 나타내는 정수를 출력하고, 그 다음에 세 점 A, B, C가 시계 방향으로 놓여져 있을 경우에는 -1을 출력하고, 반시계 방향으로 놓여져 있을 경우에는 1을 출력하며, 같은 직선 상에 놓여져 있는 경우에는 0을 출력한다.

두 정수 사이에는 한 개의 공백을 둔다.

 

입력과 출력의 예

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# include <iostream>
using namespace std;
 
int main(){
 
  int t;
  cin >> t;
 
  for(int i = 0; i < t; i++){
    int Ax, Ay, Bx, By, Cx, Cy;
    cin >> Ax >> Ay >> Bx >> By >> Cx >> Cy;
 
    int area = ((Bx - Ax)*(Cy - Ay) - (Cx - Ax)*(By - Ay));
 
    if(area < 0)
      cout << -area << " " << -1 << endl;
    else if(area > 0)
      cout << area << " " << 1 << endl;
    else
      cout << area << " " << 0 << endl;
  }
  return 0;
}
 
cs

 

 

'Programming Language > C++' 카테고리의 다른 글

[c++] 사각형과 점과의 거리  (0) 2020.10.31
[c++] 삼각형의 종류 (2)  (0) 2020.10.31
[c++] 삼각형의 종류 (1)  (0) 2020.10.31
[c++] 수직/수평 선분의 교차  (0) 2020.10.31
[c++] 끝자리 숫자 계산하기  (0) 2020.10.31

삼각형의 종류 (2)

 

2차원 평면에서 세 개의 점 A, B, C 로 만들어지는 삼각형이 직각 삼각형, 둔각 삼각형, 예각 삼각형인지를 판별하는 프로그램을 작성하시오.

직각 삼각형은 삼각형의 세 각 중에서 한 개의 각이 직각인 삼각형을 말하며, 둔각 삼각형은 세 각 중에서 한 개의 각이 90도 보다 큰 삼각형 을 말하며, 예각 삼각형은 삼각형의 세 각이 모두 90도 보다 작은 삼각형을 말한다.

삼각형의 세 변의 길이를 각각 a, b, c 라고 하고, 가장 긴 변의 길이를 c 고 가정할 때, 피타고라스 정리에 의하여, 직각 삼각형, 둔각 삼각형, 예각 삼각형은 각각 다음과 같은 성질을 만족한다.

예를 들어, 세 꼭지점의 좌표가 (1, 1), (4, 1), (1, 5)인 삼각형은 직각 삼각형이며, (1, 1), (4, 0), (0, 5)인 삼각형은 둔각 삼각형이고, (1, 1), (4, 2), (2, 5)인 삼각형은 예각 삼각형 이다.

또한 좌표가 (1, 1), (4, 4), (5, 5)인 세 점은 삼각형을 만들지 못한다.

 

입력

입력은 표준입력(standard input)을 사용한다.

입력은 t 개의 테스트 케이스로 주어진다.

입력 파일 의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다.

두 번째 줄부터 t 개의 줄에 는 한 줄에 하나의 테스트 케이스에 해당하는 세 점의 좌표를 나타내는 여섯 개의 정수 ax ay bx by cx cy ( -100 ≤ ax,ay,bx,by,cx,cy ≤ 100 )가 입력된다.

연속된 두 개의 정수 (ax, ay), (bx, by), (cx, cy)는 각각 삼각형의 한 점의 좌표를 나타낸다.

각 정수들 사이에는 한 개의 공백이 있으며, 잘못된 데이터가 입력되는 경우는 없다.

단, 입력되는 삼각형의 두 꼭지점의 좌표가 같은 경우는 없다.

 

출력

출력은 표준출력(standard output)을 사용한다.

입력되는 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트 케이스의 결과를 출력한다.

각 테스트 케이스에 해당하는 출력의 첫 줄에 입력되는 세 점에 의하여 삼각형이 만들어 지지 않는 경우에는 0을 출력하고, 세 점에 의하여 직각 삼각형, 둔각 삼각형, 예각 삼각형이 만들어지는 경우에는 각각 1, 2, 3을 출력한다. 

 

입력과 출력의 예

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# include <iostream>
# include <math.h>
 
using namespace std;
 
void compare(int* a, int* b, int *c){
  if(*> *c)
    swap(*a, *c);
  if(*> *c)
    swap(*b, *c);
  if(*> *b)
    swap(*a, *b);
}
 
int main(){
  int t;
  cin >> t;
 
  for(int i = 0; i < t; i++){
    int Ax, Ay, Bx, By, Cx, Cy, a, b, c;
    double A, B, C;
 
    cin >> Ax >> Ay >> Bx >> By >> Cx >> Cy;
 
    a = (Ax - Bx)*(Ax - Bx) + (Ay - By)*(Ay - By);
    b = (Bx - Cx)*(Bx - Cx) + (By - Cy)*(By - Cy);
    c = (Cx - Ax)*(Cx - Ax) + (Cy - Ay)*(Cy - Ay);
 
    compare(&a, &b, &c);
 
    A = sqrt((double)a);
    B = sqrt((double)b);
    C = sqrt((double)c);
 
    if(A + B <= C)
      cout << 0 << endl;
    else
    {
      if(a + b == c)
        cout << 1 << endl;
      else if(a + b < c)
        cout << 2 << endl;
      else
        cout << 3 << endl;
    }
  }
  return 0;
}
 
cs

 

'Programming Language > C++' 카테고리의 다른 글

[c++] 사각형과 점과의 거리  (0) 2020.10.31
[c++] 삼각형 면적  (0) 2020.10.31
[c++] 삼각형의 종류 (1)  (0) 2020.10.31
[c++] 수직/수평 선분의 교차  (0) 2020.10.31
[c++] 끝자리 숫자 계산하기  (0) 2020.10.31

[ 삼각형의 종류 (1) ]

 

세 개의 자연수 a b c (a ≤ b ≤ c) 가 주어졌을 때, 이 자연수를 삼각형의 세 변의 길이로 하여 만들어질 수 있는 삼각형의 종류를 판별하는 프로그램을 작성하시오.

삼각형의 종류에는 정삼각형, 직각 삼각형, 이등변삼각형, 그리고 일반삼각형이 있다고 가정한다.

정삼각형은 삼각형의 세 변의 길이가 모두 같은 삼각형이며, 직각삼각형은 삼각형의 하나의 각이 직각인 경우이며, 이등변삼각형은 두 변의 길이만 같은 삼각형이다. 그 나머지 형태는 일반삼각형이다.

참고로, 한 변의 길이가 다른 두 변 의 길이의 합보다 크거나 같은 삼각형은 존재하지 않는다.

예를 들어, 길이가 각각 1, 2, 3 인 삼각형을 존재하지 않는다.

길이가 각각 3, 4, 5 인 삼각형은 직각 삼각형이며, 길이가 4, 4, 4 인 삼각형은 정삼각형이다.

 

입력

입력은 표준입력(standard input)을 사용한다.

입력은 t 개의 테스트 케이스로 주어진다.

입력 파일의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다.

두 번째 줄부터 t 개의 줄에 는 한 줄에 한 개의 테스트 케이스에 해당하는 세 개의 정수 a b c (1 ≤ a ≤ b ≤ c ≤ 100) 가 입력된다.

모든 정수들 사이에는 한 개의 공백이 있으며, 잘못된 데이터가 입력되는 경우는 없다.

 

출력

출력은 표준출력(standard output)을 사용한다.

입력되는 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트 케이스의 결과를 출력한다.

각 테스트 케이스에 해당하는 출력의 첫 줄에 입력되는 정수를 삼각형의 변의 길이로 하여 만들어질 수 있는 삼각형의 종류를 출력한다.

먼저, 삼각형을 만들 수 없는 경우에는 0 을 출력한다.

만들어진 삼각형이 정삼각형인 경우에는 1 을, 직각삼각형인 경우 에는 2 를, 이등변삼각형인 경우에는 3 을, 그리고 일반삼각형인 경우에는 4 를 출력한다.

단, 정삼각형을 이등변 삼각형으로는 출력하지 않는다.

참고로, 정수의 길이를 가지는 삼각형 중에는 직각이등변 삼각형이 존재하지 않는다.

 

입력과 출력의 예

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# include <iostream>
using namespace std;
 
int main(){
 
  int t;
  cin >> t;
 
  for(int i = 0; i < t; i++){
    int a, b, c;
    cin >> a >> b >> c;
 
    if((a + b <= c) || (a + c <= b) || (b + c <= a))
      cout << 0 << endl;
    else if((a == b) && (b == c) && (c == a))
      cout << 1 << endl;
    else if((a*+ b*== c*c) || (a*+ c*== b*b) || (c*+ b*== a*a))
      cout << 2 << endl;
    else if((a == b) || (b == c) || (c == a))
      cout << 3 << endl;
    else
      cout << 4 << endl;
  }
  return 0;
}
 
cs

 

 

'Programming Language > C++' 카테고리의 다른 글

[c++] 삼각형 면적  (0) 2020.10.31
[c++] 삼각형의 종류 (2)  (0) 2020.10.31
[c++] 수직/수평 선분의 교차  (0) 2020.10.31
[c++] 끝자리 숫자 계산하기  (0) 2020.10.31
[c++] 모래시계 출력하기  (0) 2020.10.31

[ 수직/수평 선분의 교차 ]

 

두 개의 선분이 서로 공통인 점을 가지고 있을 때, 이 두 선분은 서로 교차한다고 정의하며, 그 공통인 점을 교차점이라고 부른다.

또한, 두 선분이 교차할 때, 그 교차점이 두 선분의 어느 꼭지점에도 속하지 않을 경우에 이 두 선분은 “완전 교차”한다고 정의한다.

따라서, 완전 교차하지 않는 두 선분 이 교차하는 경우는 두 선분의 교차점이 두 선분의 어느 한 꼭지점을 포함하는 경우이다.

이와 같이 두 선분이 서로 교차하지만 완전 교차하지 않는 경우를 특별히 두 선분이 접해있다고 정의한다.

 

아래 그림에서 수평선분 p 와 수직선분 q 는 서로 완전교차하고 있으며, 수직선분 q 와 수평선분 s 는 서로 교차하지 않는다.

그리고, 수평선분 p 와 수직선분 r 은 서로 접해있으며, 또한 수평선분 s 와 수직선분 t 도 서로 접해있다.

2 차원 평면 상에 X-좌표 축에 평행한 선분과 Y-좌표 축에 평행한 두 개의 선분이 주어졌을 때, 이 두 개의 선분이 서로 교차하는지를 판별하는 프로그램을 작성하시오.

 

입력

입력은 표준입력(standard input)을 사용한다.

입력은 t 개의 테스트 케이스로 주어진다.

입력 파일의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다.

두 번째 줄부터 두 개의 줄마다 한 개의 테스트 케이스에 해당하는 데이터가 입력된다.

각 테스트 케이스의 첫 번째 줄 과 두 번째 줄에 각각 하나의 선분의 양 꼭지점의 위치에 대한 데이터가 입력된다.

선분의 양 꼭지점의 위치는 네 개의 정수 x1 y1 x2 y2 (0  x1, x2 1000, 0  y1, y2 1000) 로 표시되며, (x1, y1) 은 선분의 한 꼭지점의 좌표이며, (x2, y2) 는 다른 꼭지점의 좌표이다.

단, 입력되는 두 선분 중에서 한 선분은 수평 선분이고, 다른 한 선분은 반드시 수직 선분이며, 모든 선분의 길이는 1 이상이다.

입력되는 각 정수 사이에는 한 개의 공백이 있으며, 잘못된 데이터가 입력되는 경우는 없다. 

 

출력

출력은 표준출력(standard output)을 사용한다.

입력되는 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트 케이스의 결과를 출력한다.

각 테스트 케이스에 해당하는 출력의 첫 줄에 입력되는 두 개의 선분이 서로 완전 교차하는 경우에는 1 을 출력하고, 서로 접해있는 경우에는 2 를 출력하고, 그렇지 않은 경우에는 0 을 출력한다.

 

입력과 출력의 예

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# include <iostream>
using namespace std;
 
void compare(int* a, int* b){
  if(*> *b)
    swap(*a, *b);
}
 
int main(){
  int t;
  cin >> t;
 
  for(int i = 0; i < t; i++){
    int x1, y1, x2, y2, X1, Y1, X2, Y2;
    cin >> x1 >> y1 >> x2 >> y2 >> X1 >> Y1 >> X2 >> Y2;
 
    if((x1 == x2)&&(Y1 == Y2)){
      compare(&y1, &y2);
      compare(&X1, &X2);
      if((x1 > X1) && (x1 < X2) && (Y1 > y1) && (Y1 < y2))
        cout << 1 << endl;
      else if(((x1 == X1) || (x1 == X2)) && (Y1 >= y1) && (Y1 <= y2))
        cout << 2 << endl;
      else if(((Y1 == y1) || (Y1 == y2)) && (x1 >= X1) && (x1 <= X2))
        cout << 2 << endl;
      else
        cout << 0 << endl;
    }
    else{
      compare(&x1, &x2);
      compare(&Y1, &Y2);
      if((X1 > x1) && (X1 < x2) && (y1 > Y1) && (y1 < Y2))
        cout << 1 << endl;
      else if(((X1 == x1) || (X1 == x2)) && (y1 >= Y1) && (y1 <= Y2))
        cout << 2 << endl;
      else if(((y1 == Y1) || (y1 == Y2)) && (X1 >= x1) && (X1 <= x2))
        cout << 2 << endl;
      else
        cout << 0 << endl;
    }
  }
  return 0;
}
cs

 

'Programming Language > C++' 카테고리의 다른 글

[c++] 삼각형의 종류 (2)  (0) 2020.10.31
[c++] 삼각형의 종류 (1)  (0) 2020.10.31
[c++] 끝자리 숫자 계산하기  (0) 2020.10.31
[c++] 모래시계 출력하기  (0) 2020.10.31
[c++] 숫자로 삼각형 출력하기  (0) 2020.10.31

[ 끝자리 숫자 계산하기 ]

 

여러 개의 자연수가 주어졌을 때, 주어진 모든 자연수를 곱한 수의 마지막 자리수(1의 자리수)를 계 산하는 프로그램을 작성하시오.

예를 들어, 세 개의 자연수 9, 314, 27을 곱한 수의 마지막 자리수는 2이다.

 

입력

입력은 표준 입력(standard input)을 사용한다.

입력은 t개의 테스트 케이스로 주어진다.

입력 파일의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t가 주어진다.

두 번째 줄부터 t개의 줄에 는 한 줄에 한 개의 테스트 케이스에 해당하는 정수들이 주어진다.

각 테스트 케이스에 해당되는 각 줄의 첫 번째 정수 n(1 ≤ n ≤ 100) 은 주어진 자연수의 개수를 나타낸다.

그 다음에는 n 개의 자연 수가 주어지는데, 각 자연수의 최소값은 1이며 최대값은 231-1이다.

같은 줄에 나열되는 각 정수들 사이에는 한 개의 공백이 있으며, 잘못된 데이터가 입력되는 경우는 없다.

 

출력

출력은 표준 출력(standard output)을 사용한다.

입력되는 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트 케이스의 결과를 출력한다.

각 테스트 케이스에 해당하는 출력의 첫 줄에 입력되는 n개의 자연수를 곱한 수의 마지막 자리수를 출력한다.

 

입력과 출력의 예

 

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
int main()
{
  int t;
  cin >> t; //testcase number
 
  for(int i=0; i<t; i++)
  {
    int n, data;
    int lastdigit = 1;
    cin >> n; //data number
 
    for(int j=0; j<n; j++)
    {
      cin >> data;
      lastdigit *= data % 10;
      lastdigit %= 10;
    }
    cout << lastdigit << endl;
  }
  return 0;
}
 
cs

 

'Programming Language > C++' 카테고리의 다른 글

[c++] 삼각형의 종류 (1)  (0) 2020.10.31
[c++] 수직/수평 선분의 교차  (0) 2020.10.31
[c++] 모래시계 출력하기  (0) 2020.10.31
[c++] 숫자로 삼각형 출력하기  (0) 2020.10.31
[c++] 시간 계산  (0) 2020.10.31

[ 모래시계 출력하기 ]

 

홀수의 양의 정수 k 가 주어졌을 때, 폭(가로)이 k 개의 문자로 만들어져 있고, 높이(세로)가 k 개의 줄로 만들어진 사각형 안에 아래 그림과 같은 모래시계 모양을 출력하는 프로그램을 작성하시오.

여기서, 정수 k를 모래시계의 크기라고 부른다.

예를 들어, 아래 그림은 모래시계의 크기 k 가 각각 3, 5, 7, 그리고 9 인 경우를 출력한 예이 다.

 

입력

입력은 표준입력(standard input)을 사용한다.

입력은 t 개의 테스트 케이스로 주어진다.

입력 파일의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다.

두 번째 줄부터 t 개의 줄에 는 한 줄에 한 개의 테스트 케이스에 해당하는 모래시계의 크기를 나타내는 홀수의 정수 k (3 ≤ k ≤ 99)가 입력된다.

잘못된 데이터가 입력되는 경우는 없다.

 

출력

출력은 표준출력(standard output)을 사용한다.

입력되는 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트 케이스의 결과를 출력한다.

각 테스트 케이스에 해당하는 출력의 첫 줄부터 크기가 k인 모래시계 모양을 출력한다.

모래시계 모양은 각 줄의 제일 왼쪽부터 출력하여야 한다.

 

입력과 출력의 예

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
 
int main()
{
  int t;
  cin >> t;
 
  for(int i = 0; i < t; i++)
  {
    int k;
    cin >> k;
 
    int start = 0;
    int end = k + 1;
    for(int j = 0; j < k; j++)
    {
      if(j < k/2 + 1)
        start = j, end--;
      else
        start--end++;
 
      for(int p = start; p>0; p--)
        cout << "-";
 
      int num = 0;
      for(int p = start; p <end; p++)
      {
        if(num%2)
          cout << "+";
        else
          cout << "*";
 
        num += 1;
      }
      for(int p = end; p<k; p++)
        cout << "-";
 
      cout << "\n";
    }
  }
  return 0;
}
cs

 

'Programming Language > C++' 카테고리의 다른 글

[c++] 수직/수평 선분의 교차  (0) 2020.10.31
[c++] 끝자리 숫자 계산하기  (0) 2020.10.31
[c++] 숫자로 삼각형 출력하기  (0) 2020.10.31
[c++] 시간 계산  (0) 2020.10.31
[c++] 직선 그래프 출력하기  (0) 2020.10.31

[ 숫자로 삼각형 출력하기 ]

 

아래 그림과 같이 양의 정수 k 가 입력될 때, 밑면의 폭(가로)이 k 개의 숫자로 만들어져 있고, 높이 가 k 개의 줄로 만들어진 숫자 삼각형을 출력하는 프로그램을 작성하시오.

여기서, 정수 k를 삼각형의 크기라고 부른다.

삼각형으로 출력된 숫자 모양에서, 삼각형의 제일 위쪽 꼭짓점에서 1부터 시작하여, 같은 열에서는 위에서 아래로 숫자가 연속적으로 나열되어 있다.

또한 각 숫자는 왼쪽 열에서 오른쪽 열 순서대로 차례대로 나열되어 있다.

예를 들면, 아래 그림은 삼각형의 크기 k 가 각각 3, 4, 5, 그리고 6 인 경우의 출력의 예이다.

 

입력

입력은 표준입력(standard input)을 사용한다.

입력은 t개의 테스트 케이스로 주어진다.

입력 파일의 첫 줄에 테스트 케이스의 개수를 나타내는 정수 t가 주어진다.

둘째 줄부터 각 줄에 한 개의 테스트 케이스에 해당하는 삼각형의 크기를 나타내는 양의 정수 k (1 ≤ k ≤ 99)가 입력된다.

잘못된 데이터가 입력되는 경우는 없다.

 

출력

출력은 표준출력(standard output)을 사용한다.

입력 테스트 케이스의 순서대로 다음 줄에 이어서 각 테스트의 결과를 출력한다.

각 테스트 케이스에 해당하는 출력의 첫 줄부터 k개의 줄에 크기가 k인 삼각형 모양으로 숫자를 출력한다.

같은 줄에 위치한 숫자들 사이에는 하나의 공백을 둔다.

삼각형 모양은 각 줄의 제일 왼쪽부터 출력하여야 한다.

 

입력과 출력의 예

 

c++ 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
int main()
{
  int t;
  cin >> t;
 
  for(int i = 0; i < t; i++)
  {
    int k;
    cin >> k;
 
    for(int j = 1; j < k + 1; j++)
    {
      int num = j;
      for(int q = 1; q < j + 1; q++)
      {
        cout << num << " ";
        num += k - q;
      }
      cout << "\n";
    }
  }
  return 0;
}
cs

 

'Programming Language > C++' 카테고리의 다른 글

[c++] 수직/수평 선분의 교차  (0) 2020.10.31
[c++] 끝자리 숫자 계산하기  (0) 2020.10.31
[c++] 모래시계 출력하기  (0) 2020.10.31
[c++] 시간 계산  (0) 2020.10.31
[c++] 직선 그래프 출력하기  (0) 2020.10.31

+ Recent posts