#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define IN_FILE "input.txt"
#define OUT_FILE "output.txt"
#define MAX_INPUT 128
#define TRUE 1
#define FALSE 0
typedef int BOOL;
BOOL make_input_num(char *inStr, int outNum[2]);
int calc_3n_1(int nInput);
void main()
{
FILE *inFp;
FILE *outFp;
char inStr[MAX_INPUT + 1] = {0};
char outStr[MAX_INPUT + 1] = {0};
int resNum[2] = {0};
int nCount;
int nCycleResult;
int nMaxCycleResult;
inFp = fopen(IN_FILE, "r");
outFp = fopen(OUT_FILE, "w");
while(fgets(inStr, MAX_INPUT, inFp) != NULL)
{
memset(resNum, 0, sizeof(resNum));
if(!make_input_num(inStr, resNum))
{
for(nCount = resNum[0], nCycleResult = 0, nMaxCycleResult = 0; nCount <= resNum[1]; nCount++)
{
nCycleResult = calc_3n_1(nCount);
if(nCycleResult > nMaxCycleResult)
{
nMaxCycleResult = nCycleResult;
}
}
sprintf(outStr, "%d %d %d\n", resNum[0], resNum[1], nMaxCycleResult);
fputs(outStr, outFp);
memset(outStr, 0, sizeof(outStr));
}
else
{
printf("Input a Invalid Number\n");
}
}
fclose(inFp);
fclose(outFp);
}
BOOL make_input_num(char *inStr, int outNum[2])
{
char *outStr[2] = {NULL};
outStr[0] = strtok(inStr, " ");
outStr[1] = strtok(NULL, " ");
outNum[0] = atoi(outStr[0]);
outNum[1] = atoi(outStr[1]);
if((isdigit(outNum[0]) == FALSE) && (isdigit(outNum[1]) == FALSE))
{
return FALSE;
}
return TRUE;
}
int calc_3n_1(int nInput)
{
int nCycleCount;
int nTempNum;
nCycleCount = 1;
nTempNum = nInput;
while(nTempNum != 1)
{
if(0 == (nTempNum % 2))
{
nTempNum /= 2;
}
else
{
nTempNum = (nTempNum * 3) + 1;
}
++nCycleCount;
}
return nCycleCount;
}
댓글을 달아 주세요
댓글 RSS 주소 : http://cookiedev.pe.kr/rss/comment/53