私信TA

用户名:dotcpp0784625

访问量:147

签 名:

等  级
排  名 2348
经  验 2319
参赛次数 0
文章发表 19
年  龄 20
在职情况 学生
学  校 北京理工大学
专  业 弹药工程与爆炸技术

  自我简介:

解题思路:

由题目可得,A和B进行剪刀石头布的游戏,A与B分别都有自己的规律,且分别在NA和NB循环一次,需要判断经过N次之后,谁获胜的次数更多。

首先,由于输入的两个数组分别均为A与B的数组,数组元素分别为NA,NB,需要现将其根据循环特性拓展为元素个数为N的数组,再分别判断两个数组对应元素之间的输赢关系,如果A获胜,A获胜次数sum1++;如果B获胜,B获胜次数sum2++;如果平手则都不输出,最后比较sum1和sum2的大小,从而判断谁获胜次数更多。

注意事项:

利用A与B各自的循环特性,将arr1[NA]和arr2[NB]均扩展为元素为N的数组。

将对应下标的两个元素进行比较,判断输赢关系。

参考代码:

#include <stdio.h>


//判断数组对应元素A与B的输赢

int my_Ordering(int a, int b)

{

    if (a == 0 && b == 2 || a == 2 && b == 5 || a == 5 && b == 0)

    {

        return 1;

    }

    else if (a == 0 && b == 5 || a == 5 && b == 2 || a == 2 && b == 0)

    {

        return -1;

    }

    else

    {

        return 0;

    }

}


int main()

{

    int N = 0;

    int NA = 0;

    int NB = 0;

    int arr1[100] = { 0 };

    int arr2[100] = { 0 };

    int sum1 = 0;

    int sum2 = 0;


    scanf("%d %d %d", &N, &NA, &NB);


    //分别输入A与B的特征数组

    int i = 0;

    for (i = 0; i < NA; i++)

    {

        scanf("%d", &arr1[i]);

    }

    for (i = 0; i < NB; i++)

    {

        scanf("%d", &arr2[i]);

    }

    

    //将arr1[NA]和arr2[NB]均拓展为arr1[N]和arr2[N]

    for (i = NA; i < N; i++)

    {

        arr1[i] = arr1[i % NA];//使下标为i的数组元素大小与下标为i + NA元素相等,拓展数组

    }

    for (i = NB; i < N; i++)

    {

        arr2[i] = arr2[i % NB];//使下标为i的数组元素大小与下标为i + NB元素相等,拓展数组

    }


    //逐项对比数组元素,判断输赢关系

    for (i = 0; i < N; i++)

    {

        if (my_Ordering(arr1[i], arr2[i]) == 1)

        {

            sum1++;

        }

        else if (my_Ordering(arr1[i], arr2[i]) == -1)

        {

            sum2++;

        }

    }


    //根据输出的赢的总次数,输出结果

    if (sum1 > sum2)

    {

        printf("A\n");

    }

    else if (sum1 < sum2)

    {

        printf("B\n");

    }

    else

    {

        printf("draw\n");

    }


    return 0;

}


 

0.0分

1 人评分

  评论区

  • «
  • »