天天看點

08:石頭剪刀布(1.6)

分析:

一、赢輸平三種情況

0表示“石頭”,2表示“剪刀”,5表示“布

赢t:

0-2=-2

2-5=-3

5-0=5

輸t:

2-0=2

5-2=3

0-5=-5

平t:兩邊的值相等

 二、計算出拳情況,然後一一對比

對于測試資料,猜拳過程為:

A:0 2 5 0 2 5 0 2 5 0

B:0 5 0 2 0 5 0 2 0 5

A赢了4輪,B赢了2輪,雙方打平4輪,是以A赢的輪數多。

方法1:使用數組存儲雙方所有的出拳情況,然後一一對比即可

以規律為na為例

 int t=0;  //初值為0  for (int i=1;i<=n;i++){   t++;   a[i]=ya[t];   if (i%na==0)t=0 ; //如果i是na的倍數,t恢複初值0  }

#include<cstdio>
int a[110],b[110],ya[110],yb[110];
int main(){
    int n,na,nb;
    scanf("%d%d%d",&n,&na,&nb);
    int temp;
    for (int i=1;i<=na;i++)
        scanf("%d",&ya[i]);
    for (int i=1;i<=nb;i++)
        scanf("%d",&yb[i]);
    int t=0;
    for (int i=1;i<=n;i++){
        t++;
        a[i]=ya[t];
        if (i%na==0)t=0 ;
    } 
    t=0;
    for (int i=1;i<=n;i++){
        t++;
        b[i]=yb[t]; 
        if (i%nb==0)t=0 ;
    } 
    int suma=0,sumb=0;
    for (int i=1;i<=n;i++){
        if (a[i]-b[i]==-2||a[i]-b[i]==-3 ||a[i]-b[i]==5)suma++;
        if (a[i]-b[i]==-5||a[i]-b[i]==3||a[i]-b[i]==2) sumb++;
    }
    if (suma>sumb)printf("A\n");
    if (suma<sumb)printf("B\n");
    if(suma==sumb)printf("draw\n");
    return 0;
}
          

View Code

 方法2:邊出拳邊比較。這樣可以節約1個數組。

#include<cstdio>
int a[110],b[110],ya[110],yb[110];
int main(){
    int n,na,nb;
    scanf("%d%d%d",&n,&na,&nb);
    int temp;
    for (int i=1;i<=na;i++)
        scanf("%d",&ya[i]);
    for (int i=1;i<=nb;i++)
        scanf("%d",&yb[i]);
    int suma=0,sumb=0,t0=0,t1=0;
    for (int i=1;i<=n;i++){
        t0++;t1++;
        if (ya[t0]-yb[t1]==-2||ya[t0]-yb[t1]==-3 ||ya[t0]-yb[t1]==5)suma++;
        if (ya[t0]-yb[t1]==-5||ya[t0]-yb[t1]==3||ya[t0]-yb[t1]==2) sumb++;
        if (i%na==0) t0=0 ;
        if (i%nb==0) t1=0 ;
    }

    if (suma>sumb)printf("A\n");
    if (suma<sumb)printf("B\n");
    if(suma==sumb)printf("draw\n");
    return 0;
}      

View Code

轉載于:https://www.cnblogs.com/ssfzmfy/p/5144158.html