반응형
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 6
int is_first(int mach[7], int user[7])
{
int visit[6] = {0};
int cnt = 0;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j< 6;j++)
{
if (mach[j] == user[i])
{
if (visit[j] == 0)
{
visit[j] = 1;
cnt++;
}
}
}
}
if (cnt == 6)
return (1);
else
return (0);
}
int is_second(int mach[7], int user[7])
{
int cnt = 0;
int i;
for (i = 0; i < 6; i++)
{
if (user[i] == mach[i])
cnt++;
}
if (user[i] == mach[i])
cnt++;
if (cnt == 6)
return (1);
else
return (0);
}
int main(void)
{
int user[7];
int mach[7];
printf("\n <<lotto>>\n");
printf("the number is from 1 to 45.\n");
printf("put in your number : ");
for (int i=0; i< MAX_NUM + 1; i++)
{
scanf("%d", &user[i]);
}
// lotto number generator
srand(time(NULL));
int i;
for (i =0; i< MAX_NUM; i++)
{
mach[i] = rand() % 45 + 1;
}
mach[i] = rand() % 45 + 1; // 추가 뽑기
if (is_first(mach, user))
printf("1등\n");
else if (is_second(mach, user))
printf("2등\n");
else
{
printf("Try next time!\n");
printf("the number was : ");
for (int i=0; i<7;i++)
printf("%d ", mach[i]);
printf("\n");
main();
}
return 0;
}
처음에 짠 코드
second 코드 처럼 완전히 순서도 같아야 된다고 생각했는데 그게 아니라 6개 숫자 중 5개 숫자가 같은지만 확인하는 거였던 것... 즉 순서 상관없이 있는지 여부를 판단하는게 더 중요
그래서 first코드처럼 다시 짜봄.
int is_second(int mach[7], int user[7])
{
int visit[6] = {0};
int cnt = 0;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j< 6;j++)
{
if (mach[j] == user[i])
{
if (visit[j] == 0)
{
visit[j] = 1;
cnt++;
}
}
}
}
if (mach[6] == user[6])
cnt++;
if (cnt == 6)
return (1);
else
return (0);
}
결과 second도 고칠 수 있었음
결과 성공 !
순서가 달라도 1등 판별 가능 :D
참고한 블로그에서는 로또 프로그램 규칙 버그까지 고려
그래서 다시 고침
https://bymakers.tistory.com/30
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 6
int is_first(int mach[8], int user[8])
{
int visit[6] = {0};
int cnt = 0;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j< 6;j++)
{
if (mach[j] == user[i])
{
if (visit[j] == 0)
{
visit[j] = 1;
cnt++;
}
}
}
}
if (cnt == 6)
return (1);
else
return (0);
}
int is_second(int *mach, int *user)
{
int visit[6] = {0};
int cnt = 0;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j< 6;j++)
{
if (mach[j] == user[i])
{
if (visit[j] == 0)
{
visit[j] = 1;
cnt++;
}
}
}
}
if (mach[6] == user[6])
cnt++;
if (cnt == 6)
return (1);
else
return (0);
}
int fill_usernum(int *user)
{
int temp;
printf("put in your number : ");
for (int i=0; i< MAX_NUM + 1; i++)
{
int bufflag = scanf("%d", &user[i]);
while (bufflag != 1)
bufflag = scanf("%d", &user[i]);
}
for (int i=0; i< MAX_NUM + 1; i++)
{
if (user[i] < 1 || user[i] > 45)
{
printf("\n the number is out of range.\n");
return (0);
}
}
return (1);
}
void fill_machnum(int *mach)
{
int i;
for (i =0; i< MAX_NUM + 1; i++)
{
int number;
while (1)
{
int flag = 0;
number = rand() % 45 + 1;
for (int j =0; j< i; j++)
{
if (number == mach[j])
{
flag = 1;
break;
}
}
if (flag == 0)
break;
}
mach[i] = number;
}
/*
for (int i=0; i<7;i++)
printf("%d ", mach[i]);
printf("\n"); 확인용 프린트 구문
*/
}
int main(void)
{
int user[8];
int mach[8];
srand(time(NULL));
printf("<<<<<<<<<lotto>>>>>>>>>>\n");
printf("the number is from 1 to 45.\n");
fill_machnum(mach);
if (!(fill_usernum(user)))
fill_usernum(user);
if (is_first(mach, user))
printf("1등\n");
else if (is_second(mach, user))
printf("2등\n");
else
{
printf("Try next time!\n");
printf("lotto number was : ");
for (int i=0; i<7;i++)
printf("%d ", mach[i]);
printf("\n");
main();
}
return 0;
}
아쉬운 점
int 형 %d로 받아서 %c같은 문자가 들어가면 무한루프 에러가 생긴다...
이거 어케 하지
%c로 받아야 하나?
반응형
'C언어' 카테고리의 다른 글
boj 백준 1158번 요세푸스 문제 한번에 통과 ! (0) | 2020.08.12 |
---|---|
boj 백준 큐 10845번 한번에 통과! stl 짱이다.. (0) | 2020.08.12 |
백준 boj 1406번 에디터 문제 또 시간초과ㅜ vector코드 있음 (0) | 2020.08.11 |
boj 남의 코드/정답코드 보는 법 (0) | 2020.08.09 |
[TDD] 뽑기 프로그램 만들기 (0) | 2020.08.08 |
문자열을 숫자로/ 숫자를 문자열로 바꾸는 방법 (0) | 2020.05.13 |
path 출력하기 쉬운 방법 없나? (0) | 2020.05.13 |
E0349 이러한 피연산자와 일치하는 ">>"연산자가 없습니다. char, int 크기 문제에서 (0) | 2020.05.01 |