게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C언어 질문좀 드리겠습니다.
게시물ID : computer_62412짧은주소 복사하기
작성자 : 레가테스
추천 : 0
조회수 : 437회
댓글수 : 12개
등록시간 : 2012/10/16 21:43:53

일단 0~98까지의 abc란 이름의 배열을 만들고 랜덤하게 1~100까지의 숫자를 줘서 1개 남는걸 구하는 문제입니다.

 

그런데 제가 뭘 잘못했는지 랜덤한 숫자가 하나 밖에 나오질 않더군요.(이거 왜그런지 제가 랜드 함수르 잘못쓴건지 좀 봐주세요)

 

뭐 어찌어찌 하다보니 배열마다 한개씩 들어가긴 하는데, 랜덤하게 생성 된 숫자들이 겹치는 문제가 발생했습니다.

 

왜 그런지 좀 부탁드립니다;;

 

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int cnt=0,def[100]={0,};//def배열은 abc배열보다 1 더 큼 전역변수들

int flag(int a);//랜드에서 나온 수가 기존 배열에 있던 수와 겹치는지 검사하는 함수

void main()
{
 int abc[99] = {0,};
 int i,j;
 int start=1,end=100;//1부터 100 사이의 랜덤한 수가 튀어나와야 함


 srand(time(NULL));
 
 for(i=0;i<99;i++)
 {
  cnt++;

  abc[i] = rand()%((end-start)+1)+start;
  def[i] = abc[i];
  
  if(flag(abc[i]))//flag 함수에서 1이 반환되면 실행
   i--;cnt--;

  printf("%4d %4d %4d \n", abc[i], def[i],i);
  
  if(i>99)//for문에서 abc 배열이 다 차오르면 실행
  {
   def[100] = rand()%((end-start)+1)+start;//마지막 남는 수 생성인데....아오 이거 중복검사를;

   for(i=0;i<99;i++)//abc를 0~98까지 돌려서 def에 마지막 배열에 있는 수와 검사
   {
    if(def[100] != abc[i])
     j=def[100];
   }
   break;
  }
 }
 printf("%d",j);
}

int flag(int a)//main의 abc[i]의 수를 받아옴
{
 int i;

 for(i=0;i<cnt;i++)
 {
  if(def[i] == a)//중복되면 1을 반환
   return 1;
  else
   return 0;
 }
}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호