2014-01-22 90 views
2

Link to challengeSYNC13C SPOJ錯誤答案

拉梅什和Suresh得到滿滿一箱的每個彩票的五顆星。由於 這兩個箱子不需要有相同數量的巧克力,所以它們決定玩遊戲。獲勝者獲得兩盒巧克力 。他們交替進行比賽,並且Suresh開始比賽。鑑於 在兩個盒子裏的巧克力的數量,讓他們是C1和C2, 播放器採取c1或c2數量的巧克力和 剩餘的巧克力盒分爲兩個盒子(這兩個盒子不需要 有相同的巧克力的數量)。不能讓這樣的球員輸球的球員輸球。輸入

第一行輸入包含數字T(1 < = T < = 1000),測試用例的數量爲 。然後如下Ť行,每行包含兩個空間分離 整數c1和c2

(1 < = C1 < = C2 < = 10000)。

輸出對於每個測試用例,打印「Ramesh」或「Suresh」取決於誰是贏家。

輸入:2 3 1 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

Intersting one。有一點是肯定的:你不使用'if if if',但是使用遞歸算法。例如,您將

回答

2

該代碼比這要簡單得多。首先,讓我解釋一下這個算法。

W是一個數組,其中,

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

讓我們構建這個數組,我們將得到一個模式。

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

對於所有i>1,我們有:

W[i] = 1,如果存在整數ab這樣a+b=iW[a]=W[b]=00否則。

上述聲明意味着,對於用戶通過選擇i一盒巧克力贏了,他需要確保,他的對手失去不管他再選擇內容框中。他的對手放鬆意味着W[a]=W[b]=0a+b=i

如果我們試圖填補這個數組我們得到,

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

VAL:0 1 0 1 0 1 0 ...

這意味着,如果一個給定的整數是even,然後蘇雷什誓奪。如果他們兩個都是odd,這意味着ramesh會贏。

希望我清楚。

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; 
}