<div>#include <stdio.h><br>#include <stdlib.h></div> <div>int endturn(int a[],int b)<br>{<br> int m,c=0;<br> for(m=0;m<b-1;m++)<br> if(a[m] == a[m+1])<br> c++;<br> if(c==b-1) return 1;<br> else return 0;<br>}<br>void main()<br>{<br> int n,child;<br> int *candy;<br> int turn;//n회 순환<br> int i,j;</div> <div> scanf("%d",&n);//n회 정해줌<br> for(i=0;i<n;i++)<br> {<br> turn = 0;<br> scanf("%d",&child);//아이들의 수 받기<br> candy = (int*)malloc(sizeof(int)*child);<br> for(j=0;j<child;j++)//아이들이 가진 사탕수 받기<br> scanf("%d",&candy[j]);</div> <div> </div> <div>//candy war<br> //1명과 2명일때<br> if(child == 1)<br> turn = 0;<br> else if(child == 2)<br> turn = 1;<br> else//3명 이상일때<br> {<br> while(1){<br> for(j=0;j<child;j++)<br> if(candy[j] % 2 == 1)<br> candy[j] += 1;<br> for(j=0;j<child;j++)<br> {<br> if(endturn(candy,child) == 1)<br> break;<br> if(j == child-1)//원 만들기<br> {<br> candy[j] = candy[j]/2;<br> if(endturn(candy,child) == 1)<br> break;<br> candy[0] += candy[j];<br> }<br> else<br> {<br> candy[j] = candy[j]/2;<br> if(endturn(candy,child) == 1)<br> break;<br> candy[j+1] += candy[j];<br> }<br> if(candy[j+1] % 2 == 1)<br> candy[j+1] += 1;</div> <div> }<br> turn++;<br> }<br> }</div> <div> printf("%d\n",turn);<br> free(candy);<br> }<br>}</div> <div>이런 코드입니다.</div> <div>ACM예선 문제중 하나로 나온건데</div> <div>유치원에서 사탕을 공정하게 나누는 방법입니다.</div> <div>처음 몇번 할껀지 값을 받고 for문으로 돌리고</div> <div>그 다음 몇명의 아이들이 있는지 child에받고 그 아이들이 각각 가지고 있는 사탕 수를 candy에 담았습니다.</div> <div>방식은 자기가 가진것의 절반을 다음 아이에게 주는 겁니다.</div> <div>이렇게 해서 몇회 돌아야지 모든 아이들이 같은 수의 사탕을 가지게 만드는지 알아내는 문제입니다.</div> <div>이때 처음 시작할때 자신이 가진 사탕이 홀수면 선생님이 1개를 더 주어 짝수로 만들어줍니다.</div> <div> </div> <div>문제는 그냥 while문으로 계속 돌리다가 모든 수가 같을때 빠져나와야 하는데 저는 계속 while에서 빠져나오지 못하고 있습니다.</div> <div>뭐가 문제인가요? ㅠㅠ 고수분들 도와주세요 ㅠㅠ</div>
<a href="http://steamcommunity.com/id/zpq456/">http://steamcommunity.com/id/zpq456/</a>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.