首页 > 其他分享 >一维数组_ 石头剪刀布(老是感觉有错误的地方,请指正)

一维数组_ 石头剪刀布(老是感觉有错误的地方,请指正)

时间:2024-03-18 23:32:38浏览次数:24  
标签:一维 int na nb 石头 ++ 指正 && 剪刀

任务描述

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?

输入格式:

输入包含三行。
第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。
第二行包含NA个整数,表示小A出拳的规律。
第三行包含NB个整数,表示小B出拳的规律。
其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。

输出格式:

输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。

输入样例:

10 3 4
0 2 5
0 5 0 2

输出样例:

A

题目来源

注:该题目选自OpenJudge网站,在线网址:http://noi.openjudge.cn/ch0106/08/。

#include<stdio.h>
int main()
{
    int n,na,nb,ping,wa,wb;
    ping=wa=wb=0;
    
    scanf("%d %d %d",&n,&na,&nb);
    int a[n*na+3],b[n*nb+3];
    for(int i1=1;i1<=na;i1++)
    {
        scanf("%d",&a[i1]);
    }
    for(int i2=1;i2<=nb;i2++)
    {
        scanf("%d",&b[i2]);
    }
    
        for(int j1=1;j1<=na;j1++)
        {
            for(int i=1;i<=n;i++)
            a[i*na+j1]=a[j1];
        }
        for(int j2=1;j2<=nb;j2++)
        {
            for(int j=1;j<=n;j++)
            b[j*nb+j2]=b[j2];
        }
        int max;
        if(nb>na)
        max=nb;
        if(nb<=na)
        max=na;
        //4 7 11 14 17 20 23 26 29 32 
    /*    b[i*nb+1]=b[1];//5 9 13 17 21 25 29 33 37 41
        a[i*na+2]=a[2];
        b[i*nb+2]=b[2];
        a[i*na+3]=a[3];
        b[i*nb+3]=b[3];*/
        for(int t=1;t<max*n;t++)
        {
            if(a[t]==0&&b[t]==0)
            ping++;
            if(a[t]==0&&b[t]==2)
            wa++;
            if(a[t]==0&&b[t]==5)
            wb++;
            if(a[t]==2&&b[t]==0)
            wb++;
            if(a[t]==2&&b[t]==2)
            ping++;
            if(a[t]==2&&b[t]==5)
            wa++;
            if(a[t]==5&&b[t]==0)
            wa++;
            if(a[t]==5&&b[t]==5)
            ping++;
            if(a[t]==5&&b[t]==2)
            wb++;
        }
        if(wa>wb)
        printf("A");
        else 
        printf("B");
    
    return 0;
 } 

 

标签:一维,int,na,nb,石头,++,指正,&&,剪刀
From: https://blog.csdn.net/2301_80920713/article/details/136740973

相关文章

  • 金融知识分享系列之:M1货币、M2货币、M2和M1剪刀叉、规模以上工业增加值
    金融知识分享系列之:M1货币、M2货币、M2和M1剪刀叉、规模以上工业增加值一、M1货币二、M2货币三、M2和M1剪刀叉四、规模以上工业增加值一、M1货币M1货币是一种货币定义,它包括所有可用于支付货款的流通现金、支票存款、准备金等。M1货币被认为是最流动的货币,因为它包括......
  • 动态规划·爬楼梯问题(一维)与印章问题(二维)
    算法介绍动态规划(DynamicProgramming)的核心是当前状态的解由上一状态得到。算法将求解问题分解成多个相似的子问题,每个子问题的解由上一个子问题的解得到并储存,往往用于优化递归问题,减少相同子问题的重复计算。一维动态规划·爬楼梯问题问题描述假设你正在爬楼梯,需要n ......
  • 一维数组_校门外的树
    任务描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表......
  • 一维时间序列的离散正交Stockwell变换和离散余弦Stockwell变换
    MATLAB环境下一维时间序列信号的离散正交Stockwell变换和离散余弦Stockwell变换。Stockwell变换是一种对短时傅立叶变换STFT和小波变换WT扩展的时频分析方法。Stockwell变换将傅里叶变换的绝对相位保持特性与WT的频率相关分析和多分辨率特性结合起来。离散正交Stockwell变换......
  • 一维数组和二维数组传参是不同的:
    数组传参,传递的实质是首元素的地址。(一)一维数组例:写一个函数对将一个整型数组的内容,全部置为-1,再写一个函数打印数组的内容.#include<stdio.h>voidreset(intarr[],intx)//形参和实参名可以相同也可以不相同{ inti=0; for(size_ti=0;i<x;i++) { arr[i......
  • C++U6-06 - 一维线性动态规划
    上节课作业:链接:https://pan.baidu.com/s/17Fei1SuGEk5pnSspf_hprg?pwd=hq04提取码:hq04 动态规划  [最长上升子序列]  本题采用动态规划。数据储存,设定数组a[]用于存储数字序列,设定dp[]数组用于统计上升的序列个数;遍历组数a[],在遍历的过程中如果出现了数......
  • 一维差分/前缀和
    算法笔记的第一篇文章前缀和:在做题时,我们经常会遇见这种问题:给你一个长度为\(n\)的序列\(a\),有\(q\)次询问,每次给出一个区间\(\left[L,R\right]\),请输出\(a_l+a_{l+1}+\cdots+a_r\)的和。对于这种问题,最为简单的方式莫过于\(\operatorname{O}(nq)\)暴力了。......
  • day42 动态规划part4 代码随想录算法训练营 46. 携带研究材料- 一维数组写法
    题目:46.携带研究材料我的感悟:一维是二维的压缩理解难点:倒序遍历j因为每轮的数字是由左上决定的。遍历的时候,从右侧遍历,是不会影响左侧的。听课笔记:代码示例:defbag_problem(weight,value,bagWeight):#初始化dp=[0]*(bagWeight+1)fori......
  • stm32单片机扫码设计方案,ESP32蓝牙无线扫码器设计项目硬件套件的实现,一维码二维码识别
    stm32/ESP32(或ESP32C3,ESP32S3)/ESP8266单片机扫码识别设计方案二维码一维码扫描模块开发项目资料程序,轻松实现蓝牙扫码器WiFi无线串口,二维码识别显示器串口输出条码扫描枪扫码枪开发项目套件设计,很适合DIY无需焊接,到手即可开发调试。ESP32,ESP8266等基于arduino库实现,stm32基于......
  • 动态规划--一维dp和二维dp
    在解决背包问题时,使用一维动态规划数组和二维动态规划数组都是常见的方法,选择哪种方式取决于问题的特点和解法的需要。使用一维DP数组的情况:状态转移方程只涉及到上一行的元素:当状态转移方程只涉及到上一行的元素时,可以使用一维DP数组。这样能够降低空间复杂度,使算法更为简......