Created
October 4, 2018 00:56
-
-
Save Gumball12/b7c104cc97f84aa30eee18881cf7c8f9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//gcc 5.4.0 | |
/** 로또 | |
* | |
* # Rules | |
* > 숫자는 1 ~ 45 | |
* > 총 7 개의 숫자를 뽑는다 | |
* | |
* # Process | |
* 1. 7 개의 숫자를 입력한다 | |
* 2. 1 ~ 45 중 하나씩 랜덤으로 총 7 개를 뽑는다 | |
* 3. 사용자가 입력한 숫자와 랜덤으로 뽑힌 숫자를 비교해 맞은 갯수를 출력한다 | |
* | |
* # Functions | |
* > getData: 1부터 45까지의 숫자가 오름차순으로 들어있는 배열 데이터를 가리키는 포인터를 반환. (Model 이라고 생각하면 되겠다) | |
* > controller: 입력받는 숫자와 로또 데이터를 이용해 처리. (Controller 라고 생각하면 되겠다) | |
* >> shuffle: 배열 데이터를 랜덤하게 섞음 | |
* >> checkCount: (섞인)배열 데이터와 사용자의 입력을 비교해 서로 일치하는 갯수를 반환 | |
* >> getMsg: (일치하는)갯수를 이용해 출력할 메시지를 반환 | |
*/ | |
#include <stdio.h> | |
#include <string.h> | |
#include <math.h> | |
#include <stdlib.h> | |
#include <time.h> | |
/** | |
* | |
* Model | |
* | |
*/ | |
char *getData () { | |
static char data[45]; | |
for (unsigned char i = 0; i < 45; i++) { | |
data[i] = i + 1; | |
} | |
return data; | |
} | |
/** | |
* | |
* Controller | |
* | |
*/ | |
char *shuffle (char *data) { | |
srand(time(NULL)); // for random value | |
for (unsigned char i = 0; i < 45; i++) { | |
unsigned char targetIndex = (rand() % 44) + 1; | |
unsigned char tmp = data[i]; | |
// swap data | |
data[i] = data[targetIndex]; | |
data[targetIndex] = tmp; | |
} | |
return data; | |
} | |
unsigned checkCount (char *data, int *inputs) { | |
// 정말로 멍청한 방법이지만, check if exists value in array를 간단히 구현할 수 있기 때문에 일일이 비교 [O(n^2)] | |
unsigned cnt = 0; | |
for (unsigned char i = 0; i < 7; i++) { | |
for (unsigned char j = 0; j < 7; j++) { | |
if (data[j] == inputs[i]) { | |
cnt++; | |
break; | |
} | |
} | |
} | |
return cnt; | |
} | |
char *getMsg(unsigned cnt) { | |
static char bf[100] = ""; | |
sprintf(bf, "총 %d 개 맞추었습니다.\n\n------\n", cnt); | |
return bf; | |
} | |
void controller (int *inputs) { | |
char *data = getData(); | |
printf(getMsg(checkCount(shuffle(data), inputs))); | |
for (unsigned char i = 0; i < 7; i++) { | |
printf("data: %d, inputs: %d\n", data[i], inputs[i]); | |
} | |
} | |
/** | |
* | |
* main | |
* | |
*/ | |
int main(void) | |
{ | |
int inputs[7]; | |
for (char i = 0; i < 7; i++) { | |
scanf("%d", &inputs[i]); | |
} | |
controller(inputs); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
실행: http://rextester.com/live/CQLKZX23901