#38952: c(2ms, 96KB)/c++(2ms, 96KB)昨天剛寫完講義,回來練第一題


bobobo0413 (Andy)

學校 : 國立臺灣大學
編號 : 252359
來源 : [163.30.63.84]
最後登入時間 :
2024-11-21 13:04:23
h026. 202001_1 猜拳 -- 2020年1月APCS | From: [42.79.61.55] | 發表日期 : 2024-01-06 21:32

c(2ms, 96KB)/c++(2ms, 96KB)

解題思路:為了讓程式乾淨,決定把勝負拉出來一個函式,觀察發現除了5對0,另兩個是數字小的獲勝,這樣可省下很多行。使用while迴圈設定哥哥下一次出的拳,題目說兩次一樣的要出勝出的拳,所以先處理,剩下的拳和妹妹這次一樣。while迴圈設定

bw==sw&&j<n兄妹平手以及次數少於n。

輸出依題目的文字,以及第幾輪要記得些出來,C和C++的原始碼一樣,只有第一行不一樣,我有發現C++其實也可include<stdio.h>,以下提供原始碼:

#include<cstdio>       //c:#include<stdio.h>

int bw=0,sw=0;
void f(int a,int c)
{
if(a==5&&c==0)
    bw++;
else if(c==5&&a==0)
    sw++;
else if(a>c)
    sw++;
else  if(a<c)
    bw++;
}
int main()
{
    int b,n;
    scanf("%d%d",&b,&n);
    int s[n],i,j=0;
    for(i=0;i<n;i++)
        scanf("%d",&s[i]);
    while(bw==sw&&j<n)

    {
        printf("%d ",b);
f(b,s[j]);
if(j>0)
{
    if(s[j]==s[j-1])
    {
        if(s[j]==0)
              b=5;
        else if(s[j]==2)
    b=0;
    else
    b=2;
    }
         else
       b=s[j];
}
else
    b=s[j];
    j++;
    }
    if(bw>sw)
printf(": Won at round %d\n",j);
else if(sw>bw)
    printf(": Lost at round %d\n",j);
else
    printf(": Drew at round %d\n",j);
return 0;
}

 
ZeroJudge Forum