게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[본삭금] 죄송합니다.. C언어 질문이요
게시물ID : programmer_17580짧은주소 복사하기
작성자 : 이라세오날
추천 : 1
조회수 : 479회
댓글수 : 4개
등록시간 : 2016/06/12 05:17:14
옵션
  • 본인삭제금지
1~45사이의 숫자가 랜덤으로 여섯번 출력되게 하는 프로그램을 짜는 문제입니다..
이때 중복되는 값이 없도록 출력해야하며, 난수를 발생시키는 함수 int lotto(void)와 중복을 검사하는 함수 int is_in_array(int size, int num)은 반드시 사용해야만 합니다.
 
아래 코드처럼 짜봤는데 중복되는 값이 계속 나와서 질문드립니다. 어느 부분을 고쳐야 잘 돌아갈까요?
이상하게 문제를 못찾겠습니다.. 물론 제 눈에만 안보이는것 같긴 합니다만
 
도와주시면 정말로 감사하겠습니다... 꾸벅
 
 
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int lottoNum[6];
int lotto(void) /* 난수 생성 함수 */
{
 int number;
 long seed;
 seed = time(NULL); /* 시간이 지남에 따라 새로운 난수 생성 */
 number = (rand() % 45 + 1); /* 생성한 난수를 number에 저장 */
 return number; /* number값 반환 */
}
int is_in_array(int size, int num) /* 중복검사 함수 */
{
 int i, j;
 for (i = 0; i < size; i++)
 {
  for (j = 1; j < size; j++)
  {
   if (lottoNum[i] == num) /* 현재 i번째 값과 비교 */
   {
    if (lottoNum[j] == lottoNum[i]) /* 이전에 생성된 값과 비교 */
     return 1; /* 같은 수가 있다면 1을 반환 */
   }
   else
    return 0;
  }
 }
}
int main(void)
{
 int i, a, count = 0;
 srand((unsigned)time(NULL));
 for (i = 0; i < 6; i++)
  lottoNum[i] = rand() % 45 + 1;
 while (1)
 {
  a = is_in_array(i, lottoNum[i]); /* a = 1이면 같은 숫자가 있음 */
  if (a == 1)
  {
   lottoNum[i] = lotto(); /* 재생성 */
  }
  else if (a == 0) /* 같은 숫자가 없음 */
  {
   count++;
   if (count == 5)
    break;
  }
 }
 for (i = 0; i < 6; i++)
  printf("%d ", lottoNum[i]);
 return 0;
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호