分析:
一、赢輸平三種情況
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