作者lanborghini (BMW)
看板C_and_CPP
標題[問題] ACM 10903
時間Thu Apr 9 01:03:33 2009
題目出處:
http://luckycat.kshs.kh.edu.tw/homework/q10903.htm
小弟我這題試了許久,一直找不到為什麼WA,
一開始一直以為是資測間沒空行,
可是改正之後還是不行~
麻煩各位高手解惑~感激不盡!!
CODE:
#include<stdio.h>
int main()
{
int n,k,i,j=0;
int p,q;
float kk;
char b[8],a[8];
while(scanf("%d",&n)){
if(n==0) return 0;
scanf("%d",&k);
if(j>0)
printf("\n");/*資測間空行*/
j++;
int pl[101][2]={0};/*這邊[101][0]後面的兩個陣列[0]是用來記勝場數*/
/*[1]是用來記敗場數*/
for(i=0;i<k*n*(n-1)/2;i++){
scanf("%d %s %d %s",&p,a,&q,b);
if(a[0]=='s'&&b[0]=='p'){/*剪刀(p1)對布(p2)*/
pl[p][0]++;
pl[q][1]++;
}
else if(a[0]=='p'&&b[0]=='r'){/*布(p1)對石頭(p2)*/
pl[p][0]++;
pl[q][1]++;
}
else if(a[0]=='r'&&b[0]=='s'){/*石頭(p1)對剪刀(p2)*/
pl[p][0]++;
pl[q][1]++;
}
else if(a[0]=='s'&&b[0]=='r'){/*剪刀(p1)對石頭(p2)*/
pl[p][1]++;
pl[q][0]++;
}
else if(a[0]=='p'&&b[0]=='s'){/*布(p1)對剪刀(p2)*/
pl[p][1]++;
pl[q][0]++;
}
else if(a[0]=='r'&&b[0]=='p'){/*石頭(p1)對布(p2)*/
pl[p][1]++;
pl[q][0]++;
}
}
for(i=1;i<=n;i++){ /*印出答案*/
kk = pl[i][0]+pl[i][1];
if(!kk) printf("-\n");
else{
kk = pl[i][0]/kk;
printf("%.3f\n",kk);
}
}
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.1.203
推 snowlike:!kk, 勝負的邏輯有誤要重新檢視 04/09 01:30
→ lanborghini:是說剪刀石頭布那邊!? 還是最下面的計算!? 04/09 01:54
→ snowlike:勝負之後要歸零重記錄 04/09 02:13
→ lanborghini:不是很了解耶@~@" 是說我陣列要再次歸零嗎? 04/09 02:23
→ snowlike:不歸零不就一直++, 後面兩三場的遊戲就不正確 04/09 02:24
※ 編輯: lanborghini 來自: 125.225.1.203 (04/09 02:29)
→ lanborghini:事實上一開始的時候我寫成這樣(就是上面那個修正版) 04/09 02:30
推 snowlike:可以試著動態分配記憶體給每位玩家,不然[101]挺奢侈的 04/09 02:30
→ lanborghini:不過還是有問題,所以我po的時候又改回來了 囧~ 04/09 02:30
→ snowlike:那就試著改成沒有問題的壓 ̄︶ ̄ 04/09 02:38
→ lanborghini:囧正在試…… 04/09 02:39
→ snowlike:那你的if(!kk)有沒有改?我試是沒有問題,code討厭你吧 04/09 02:41
→ lanborghini:有改耶~~~ 不過還是不行 (驚~ 04/09 02:44
※ 編輯: lanborghini 來自: 125.225.1.203 (04/09 02:44)