看板 C_and_CPP 關於我們 聯絡資訊
題目出處: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)