KU COSE101 2017기말고사 1번 문제

2 minute read

             
2016 기출 1번 2번 3번 4번 5번  
2017 기출 1번 2번 3번 4번 5번  
2018 기출 1번 2번 3번 4번 5번 6번

기존 기출 문제에 기술적 오류가 있어 약간 수정하였습니다.

뒤집어서 더하기 연산은 어떤 양의 정수가 주어졌을 때 그 수를 뒤집어서 더한 값을 출력하는 것이다. C언어로 구현한 함수 flipadd()는 이 연산을 수행하며 다음과 같은 결과를 출력한다.

flipadd(123) = 123 + 321 = 444
flipadd(195) = 195 + 591 = 786

이 함수를 몇 차례 반복 적용하면 앞으로 읽으나 뒤로 읽으나 같은 값이 되는 회문수(palindrome number)가 된다. 예를 들어 195를 시작으로 flipadd()를 몇 차례 적용하면 회문수인 9339가 출력된다.

flipadd(195) = 195 + 591 = 786
flipadd(786) = 786 + 687 = 1473
flipadd(1473) = 1473 + 3741 = 5214
flipadd(5214) = 5214 + 4125 = 9339

대부분의 정수는 이 단계를 몇 단계만 반복하면 회문수가 된다. 그렇지만 어떤 수는 1,000번 정도 반복해도 회문수가 되지 않는다. n개의 숫자를 입력으로 받아 입력값 그 숫자가 회문수가 되는데 소요되는 반복횟수, 그리고 마지막으로 계산된 회문수를 출력하는 프로그램을 작성하시오. 입력파일의 첫 줄은 총 몇 개의 숫자가 있는지를 나타낸다.

만일 1,000 회 적용했는데도 회문이 되지 않는 경우 반복횟수와 마지막 필드의 값에 -1 을 출력한다. 만약 팰린드롬을 계산하는 도중, int의 범위가 넘어가도 -1을 출력한다.

input.txt

4
195
265
196
750

output

195 4 9339
265 5 45254
196 -1 -1
750 3 6666
#include<stdio.h>

//flipadd and other functions are defined here

int solve(int n, int* count) {

}

int main() {
  FILE* fp;
  int num;
  //fill this part
  
  for(int i=0 ; i<num ; i++){
    int n, res;
    int count;
    fscanf(fp, "%d", &n);
    res = solve(n, &count);
    printf("%d %d %d\n", n, count, res);
  }
  //fill this part
  
}
예시답안
#include<stdio.h>

int flip(int k) {
	int p = 0;
	while(k) {
		p *= 10;
		p += k%10;
		k /= 10;
	}
	return p;
}

int ispalin(int k) {
	int f = flip(k);
	if(f==k) return 1;
	else return 0;
}

int solve(int n, int* count) {
	*count = 0;
	while(!ispalin(n)){
		(*count)++;
		n+=flip(n);
		if((*count)>1000) {
			(*count)=-1;
			return -1;
		}
		if(n<0){
			(*count)=-1;
			return -1;
		}
	}
	return n;
}

int main() {
  FILE* fp;
  int num;
  fp = fopen("input.txt","r");
  fscanf(fp, "%d", &num);
  for(int i=0 ; i<num ; i++){
    int n, res;
    int count;
    fscanf(fp, "%d", &n);
    res = solve(n, &count);
    printf("%d %d %d\n", n, count, res);
  }
  return 0;
}
*flip*함수 : 숫자를 뒤집어 줍니다.
*ispalin*함수 : 팰린드롬 수인지 확인해줍니다.

*fopen*함수 : 파일을 여는 함수로, fopen(파일이름, 모드)로 작성합니다.

Comments