2014-01-22 3 views
2

Link to challengeSYNC13C의 SPOJ 틀린 답

라 메쉬와 수레 쉬 복권 각각에 5 별 가득한 상자를 얻을. 두 박스 모두 동일한 수의 초콜릿을 필요로하지 않기 때문에, 그들은 게임을 결정합니다. 우승자는 초콜렛 상자를 모두 가져옵니다. 그들은 번갈아 가며 Suresh가 게임을 시작합니다. 두 상자에있는 초콜렛의 수를 c1과 c2로하면 플레이어는 초콜렛의 c1 또는 c2 숫자를 가져 와서 초콜렛의 나머지 상자를 두 상자로 나눕니다 (이 두 상자는 은 같을 필요가 없습니다). 초콜릿 수). 그런 을 만들 수없는 플레이어는 패배합니다. 입력

입력의 첫 번째 줄에는 숫자 T (1 < = T < = 1000), 테스트 사례의 수가 포함됩니다. 이어서 T를 각각 포함하는 두 공간 정수 C1 분리 된 라인 (C2)를

(1 < < = C1 = C2 = < 10000) 따른다.

출력 각 테스트 케이스에 대해 누가 이 승자인지에 따라 "Ramesh"또는 "Suresh"를 인쇄하십시오.

입력 : 1 2 3 4 5

출력 : 라 메쉬 수레 쉬 여기

나에게 잘못된 답을주고 내 시도이다. 테스트 케이스를 좀 더주세요.

#include<stdio.h> 
int main() 
{ 
    int t,c1,c2,max,count,min; 
    scanf("%d",&t); 
    while(t--) 
    { 
     scanf("%d%d",&c1,&c2); 
     min=c1<c2?c1:c2; 
     max=c1>c2?c1:c2; 
     if(max%2!=0 && min%2!=0) 
      printf("Ramesh\n"); 
     else if(min%2==0 && max%2!=0) 
      printf("Suresh\n"); 
     else if(max%2==0 && min%2!=0) 
      printf("Ramesh\n"); 
     else printf("Suresh\n"); 
    } 
    return 0; 
} 
+0

인터 스테이트 1. 한가지 확실한 것은'if else if'를 사용하지 않고 재귀 적 알고리즘을 사용하는 것입니다. 예를 들어,

답변

2

코드는 그보다 훨씬 간단합니다. 먼저 알고리즘을 설명하겠습니다.

하자가

W[i] = 1 if the user wins by choosing to split the box of i chocolates and 0 if he looses.

이 배열을 만들 수 있습니다 그리고 우리는 패턴을 받고있을 것입니다, 배열 위치를 수 W. 모든 i>1에 대한

W[1] = 0, since one can't split the box of one chocolate.

, 우리는이 :

정수 a 그렇지 않으면 b 등이 a+b=iW[a]=W[b]=0, 0이 존재

W[i] = 1합니다.

위의 문

는 사용자가 i 초콜릿 상자를 선택하여 승리를 위해, 그는 그의 상대에 상관없이 자신이 더 선택 내용 상자에 푼다하지 있는지 확인 필요가 있음을 의미한다. 그의 상대방은 느슨한 것은 W[a]=W[b]=0a+b=i을 의미합니다.

우리는 우리가 얻을이 배열을 채우기 위해 시도하는 경우

,

W : 1 2 3 4 5 6 7 ...

발 : 0 1 0 1 0 1 0 ...

하나 개의 주어진 정수 even 경우이 의미 다음, 수레 쉬가 이길 것입니다. 둘 다 odd 인 경우, 이는 램 메시가 이깁니다.

희망 나는 분명하다.

0
#include<stdio.h> 
int main() 
{ 
    int t; 
    scanf("%d",&t); 
    while(t--) 
    { 
     int a,b; 
     scanf("%d%d",&a,&b); 
     if(a%2==1 && b%2==1) 
      printf("Ramesh\n"); 
     else 
      printf("Suresh\n"); 
    }  
    return 0; 
}