되는대로 살자

[C언어 기출문제&풀이] The king 본문

2009~2014/C/C++

[C언어 기출문제&풀이] The king

malu 2010. 11. 5. 21:41

프로그램 명: the_king
제한시간: 1 초

옛날 아주 오래된 옛날에 큰 영토를 가진 왕이 살았다. 그는 매우 현명했지만 최대로 셀 수 있는 수가 3 까지만 셀 수 있었다.

-3 , -2 , -1 , 0 , 1 , 2 , 3

그럼에도 그는 100 까지 셀 수 있는 많은 마술사를 데리고 있었기에 (혹자는 1000 까지 셀 수 있었다고도 말하는 이도 있었다고 전해짐) 이를 큰 약점으로는 인식하지 않았다.

그러나 어느 날 왕국에 큰 슬픔이 밀려오고 있었다. 많은 미개인들이 왕국을 삼키려고 모든 방향에서 접근하고 있었다. 그는 생애에서 가장 중대한 결단을 내려야 했다. 그는 그의 아들 중 몇 명을 선택해서 군대를 이끌 대장으로 변방으로 보내야 한다.

그러나 왕의 아들 중 몇 명은 똑똑하지만 몇 명은 멍청해서 잘못된 결단을 내려 군대의 사기를 떨어뜨린다.

더 엄밀히 이야기 하면 , 그는 아들들의 정신적 능력을 알고 있었다. 그래서 아들들에 대한 평가를 -3 에서 3 까지 점수를 부여했다. 또한 미개인들을 물리칠 그의 군대의 힘은 그가 장군으로 선택한 아들들의 정신적 능력의 거듭제곱의 합에 비례한다는 것도 알았다. 거듭제곱은 양의 정수이고 , 모든 아들들에게 동일하게 적용되고 삼을 넘지 않는다.

아들 들 중 어떤 아들을 선택하면 최대가 되는 지를 구하는 것이 문제이다.

입력

  • 입력의 첫 줄은 아들의 수이고 최대 100 을 넘지않는다.
  • 다음 줄은 아들의 정신지수에 몇 제곱을 하는지를 나타내는 수이고 이는 1 , 2 , 3 중 하나이다.
  • 다음은 아들들의 정신지수이고 이는 -3 에서 3 사이의 정수이다.

출력

최대값을 출력한다.

입출력 예

입력

3
3
2 -1 1

출력

9

hint

보기의 예에서는 (2의 3 거듭제곱) + (1 의 3 거듭제곱) = 9
-1 의 3 거듭제곱은 -1 이므로 제외
출처:Northeastern Europe 2002, Northern Subregion
풀이 : 왕자의 지능의 거듭제곱의 수가 음수인 경우를 제외하고 전부 합한
다음 출력한다. 
소스코드

#include <stdio.h>

int main()
{
 int i,n,j,k,max=-27,hdnum,sum,jaegob,sum2=0;
 scanf("%d",&n);
 scanf("%d",&jaegob);
 for(i=0;i<n;i++)
 {
  sum=1;
  scanf("%d",&hdnum);
  for(j=0;j<jaegob;j++)
   sum*=hdnum;
  if(sum>=0) sum2+=sum;
 }
 printf("%d",sum2);
}