//check_KIN에 문제있음
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#pragma warning(disable:4996)
void Test_NUM(int a[], int *bn, int *sn);
int check_KIN(int a[]);
void print_NUM(int a[], int b);
void main()
{
int T, K;//전체,KIN퍼센트
int num[5] = { 0 };
int MAX_K, ck = 0;//kin 체크
int i, j;//반복문 전용 변수
printf("T (Number of test) : ");
scanf("%d", &T);
printf("KIN %% : ");
scanf("%d", &K);
MAX_K = ((T*K) / 100);
if (((T*K) % 100) > 0)//반올림
MAX_K++;
printf("%d\n", T);
srand(time(NULL));
for (i = 0; i < T; i++)
{//첫째로 수 랜덤으로 받기
for (j = 0; j < 5; j++)
num[j] = (rand() % 10 + 1);
//둘째로 랜덤으로 받은 수가 KIN인지 확인
while ((MAX_K - ck) >= (T - i + 1))//필요KIN >= 남은 횟수
{
if (check_KIN(num) == 1){
break;
}
else{
for (j = 0; j < 5; j++)
num[j] = (rand() % 10 + 1);
}
}
if (check_KIN(num) == 1){
ck++;
print_NUM(num, check_KIN(num));
}
else
print_NUM(num, check_KIN(num));
}
}
void Test_NUM(int a[], int *bn, int *sn)
{
int score[3] = { 0 };
int i, bnum, snum;
int j = 0, zc = 0;// 점수구하기용 변수
//첫째로 큰수 작은수 가려서 빼기
bnum = a[0];
snum = a[0];
for (i = 0; i < 5; i++)
{
if (bnum < a[i])
bnum = a[i];
if (snum > a[i])
snum = a[i];
}
//첫째 큰수 빼기
for (i = 0; i < 5; i++)
{
if (a[i] == bnum){
a[i] = 0;
break;
}
}
for (i = 0; i < 5; i++)
{
if (a[i] == snum){
a[i] = 0;
break;
}
}
//현재 0 2개 남은수 3개
//둘째로 점수 구하기 단 큰수-작은수가 4 이상이면 KIN출력
for (i = 0; i < 5; i++)
{
//삭제하여 0이 된 num거르기
if (zc != 2){
if (a[i] == 0)
zc++;
else
score[j++] = a[i];
}
else
score[j++] = a[i];
}
bnum = score[0];
snum = score[0];
for (i = 0; i < 3; i++)
{
if (bnum < score[i])
bnum = score[i];
if (snum > score[i])
snum = score[i];
}
bn = &bnum;
sn = &snum;
}
int check_KIN(int a[])
{
int *bn = NULL, *sn = NULL;
Test_NUM(a, bn, sn);
if (*bn - *sn >= 4)
return 1; // KIN
else
return 0; // OK
}
void print_NUM(int a[], int b)
{
int i;
if (b == 1) printf("KIN : ");
else printf("OK : ");
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
printf("\n");
}
일단 코드는 이것입니다 컬러스크립터가 안되서 이렇게 올립니다 ㅠㅠ
문제라고 생각하는 부분은 check_KIN인데요
디버깅 해본 결과 의문점이 몇개 있어서 질문드립니다.
1. 배열 인자를 받을때
이 부분인데 여기서 int a[]는 num배열입니다(rand로 1~10사이의 값을 받게 되어있는 배열)
실행은 check_KIN(num); 이렇게 했습니다.
그런데 디버깅시에 값을 펼쳐보니 달랑 5만 나오네요...?
2.Test_NUM에서 변수바뀜
제가 원하는게 *bn,*sn을 null로 초기화 -> tset_num실행
마지막에 bn = &bnum; sn = &snum;을 해서 값을 받아오는겁니다.
이렇게 값을 받아와서 KIN여부를 확인해야 되는데...
문제는 여기서 중단이 뜹니다..
으으 제가 포인터를 잘못 쓴건가요? 아님 함수를 잘못쓴건가요? ㅠㅠ
그리고 혹시 컬러스크립터 말고 다른 코드정리 사이트 올려주시면 코드 세탁해서 댓글로 올리겠습니다.
이거때문에 3시간동안 끙끙앓았어요 ㅠㅠ