:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/11/15 21:06
노힛님 말씀대로 strike != 3으로 고쳐야 되고
사실 while(strike!=3) 으로 계속 실행하게 하시면 됩니다. 근데 문제서 이해가 안되는게 있는데 배열을 쓰지 말라고 했으니 숫자를 받을땐 한꺼번에 3자리의 자연수로 받던지 아니면 각 변수마다 따로 둬야 되는데 그런상황에서 for를 이용해 숫자를 받으라는건 좀 이해가 안되는 부분이긴 합니다. 굳이 억지로 for를 써서 짜내게 하면 이렇게도 할 순 있습니다. hit = 0; for(i = 1; i<=3; i++) scanf("%d",&number); hit = hit+number*10^(3-i); 이렇게 하면 for를 이용해서 3자리의 자연수를 받게 할 수 있습니다만 저렇게 할 거면 그냥 한번에 받던지 아니면 편하게 쓰기 위해 배열을 사용하고 말텐데...비효율적인 풀이 방식을 요구하는것 같습니다.
08/11/15 21:11
3자리의 자연수가 아니라 3개의 자연수입니다 -_-/
이 문제의 풀이를 위해서 세 개의 자연수를 '동시에' 요구하는 것이 아니기 때문에 for문과 변수 넷만 가지고 해결 가능합니다. 세 개는 Random Number이고, 하나는 입력받는 숫자죠.
08/11/15 21:14
꿀호떡a님// 야구게임의 입장에서 생각해보면 정답의 숫자와 일치를 시켜도 위치와 크기까지 같이 일치시켜야 하니까
3개의 자연수긴해도 배열로 받는게 아닌이상은 그것도 for를 이용해 받으라면 3자리의 자연수로 밖에 받을 방법이 없어 보입니다.
08/11/15 21:16
답변 달아주신분들 감사합니다. ㅜㅜ 답변 참고하여서 소스 수정하였습니다.
#include <stdio.h> #include <time.h> #include <stdlib.h> int main(void) int num1, num2, num3; int hit; int a; int b; int c; int i; int strike; int ball; srand((unsigned)time(NULL)); num1=rand()%1000/100; num2=rand()%100/10; num3=rand()%10; for(i=1 ; strike!=3 ; i++) { printf("숫자를 입력하세요 : "); scanf("%d",&hit); a=hit/100; b=hit%100/10; c=hit%10; strike=0; ball=0; if(a==num1) strike++; else if(a==num2||a==num3) ball++; else ball=ball; if(b==num2) strike++; else if(b==num1||b==num3) ball++; else ball=ball; if(c==num3) strike++; else if(c==num1||c==num2) ball++; else ball=ball; if(strike==3) printf("strike out!! %d번째만에 맞췄네요!!\n",i); else printf("%dstrike %dball !!\n",strike,ball); return 0; } 잘돌아가네요^^ 근데 아직도 if대신에 어떻게 while문을 써야될것 같은데... 방법이 생각안나네요.;; 꾸호떡님 // 올리진 못했지만 예시로 결과 출력된 사진이 있는데, 그 사진에 보면 3개의 자연수가 아니라 3자리의 자연수로 나와있어요ㅜㅡ
08/11/15 22:05
잘 돌아갈 것 같지 않은데요... 지금 if else 문을 보면, strike가 아니면 모두 ball이네요. 문제에 의하면 숫자는 같고 자리가 달라야 ball입니다.
08/11/16 02:43
else if 다음의 else에 ball = ball은 필요 없을것 같은데요.
그리고 if else if else는 정답에 가까워질수 없는 구조입니다. 왜냐면 1스트라익 이후에도 볼은 있을 수 있기 때문에 if else if else의 구조는 제일 첫 조건문이 참이면 밑의 식은 수행되지 않으므로 if() if( ){ } else if() // 스트라이크가 없을시에 볼이 있는지 찾습니다. else printf("일치하는 번호가 없습니다."); 정도로 처리하시는게 좋을듯 싶습니다. ball = ball은...솔직히 의미를 모르겠습니다. 안쓰셔도 될 부분 같습니다.
|