• 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
    ");
        if (suma<sumb)printf("B
    ");
        if(suma==sumb)printf("draw
    ");
        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
    ");
        if (suma<sumb)printf("B
    ");
        if(suma==sumb)printf("draw
    ");
        return 0;
    }
    View Code
  • 相关阅读:
    linux常用的基础知识
    【AW346】走廊泼水节
    【AW355】异象石
    【POJ3417】闇の連鎖
    【APIO2010】巡逻
    【SDOI2011】消防
    【BJWC2010】次小生成树
    【POJ3613】Cow Relays
    【POJ1734】Sightseeing trip
    【POJ1094】Sorting it all out
  • 原文地址:https://www.cnblogs.com/ssfzmfy/p/5144158.html
Copyright © 2020-2023  润新知