문제 : 신비의 숫자 6174
5432-2345=3087
8730-0378=8352
8532-2358=6174
7641-1467=6174
가 나오는데 이렇게 나오는 과정이 몇번이 되는지 프로그래밍하라라였음
뭐 1111 2222숫자는 인풋에 없는걸로 문제로 나왔으니 배제했었는데
10점 만점에 인풋방식 제대로 설명도 안해놓고 엔터 안치게 된다고 10점중에 5점을 감점당함
그 이후로 이 과목에 손을 뗏음 조교가 엿같아서 말이지
참고로 이걸 만든 시간은 대강 1시간정도였던걸로 기억함. 의외로 생각미스가 난게 많더라고여 \'ㅅ\'
근데 다른 과제는 시망 ㄲㄲ
결론 : 프로그래머라면 백트래킹에 관련되서 알아야한다 모르면 프로그래머아님 코더임 \'ㅅ\'
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
int count=0;
int start(int*);
int upanddown(const void *_elem1, const void *_elem2)
{
int* elem1=(int*)_elem1;
int* elem2=(int*)_elem2;
if(*elem1>*elem2) return -1;
else if(*elem1<*elem2) return 1;
else return 0;
}
int downandup(const void *_elem1, const void *_elem2)
{
int* elem1=(int*)_elem1;
int* elem2=(int*)_elem2;
if(*elem1>*elem2) return 1;
else if(*elem1<*elem2) return -1;
else return 0;
}
int main(void){
FILE *fp;
int dataset[4], i, final;
printf("Type 4 numbers: ");
fp=fopen("input.txt", "w");
for(i=0 ; i<4 ; i++){
dataset[i]=getche()-48;
fprintf(fp, "%d", dataset[i]);
}
fclose(fp);
fp=fopen("output.txt", "w");
final=start(dataset);
printf("\\n%d", final);
fprintf(fp, "%d", final);
fclose(fp);
return 0;
}
int start(int* dataset){
if(dataset[0]==6&&dataset[1]==1&&dataset[2]==7&&dataset[3]==4){
printf("6174");
return count;
}
else{
count++;
int i, uptodown[4], downtoup[4];
qsort((void*)dataset, 4, sizeof(int), upanddown);
for(i=0 ; i<4 ; i++) uptodown[i]=dataset[i];
for(i=0 ; i<4 ; i++) printf("%d", uptodown[i]);
printf("\\t");
qsort((void*)dataset, 4, sizeof(int), downandup);
for(i=0 ; i<4 ; i++) downtoup[i]=dataset[i];
for(i=0 ; i<4 ; i++) printf("%d", downtoup[i]);
printf("\\t");
for(i=3 ; i>=0 ; i--){
if(uptodown[i]<downtoup[i]){
dataset[i]=(uptodown[i]+10)-downtoup[i];
downtoup[i-1]=downtoup[i-1]+1;
}
else dataset[i]=uptodown[i]-downtoup[i];
}
for(i=0 ; i<4 ; i++) printf("%d", dataset[i]);
return start(dataset);
}
}
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.