首页 > 编程语言 >保龄球Split算法

保龄球Split算法

时间:2023-06-30 17:13:55浏览次数:37  
标签:columnBallCount positionStr int ++ 算法 Split columnIdx 保龄球 球瓶

需求:

  1. 剩下两个或两个以上的球瓶它们之间没有球瓶; 例如: 7-9 或者 3-10
  2. 剩下两个或两个以上的球瓶,他们前面的球瓶被击倒,例如: 5-6

保龄球位置信息如下图:  

 

        private int SplitBall(string positionStr)
        {
            //第一个球必须倒并且未倒的球大于1个
            if (positionStr[0] == '0' && positionStr.Select(o => o == '1').Count() > 1)
            {
                //数组columnIdx[i]表示第i个球所在列的索引,索引从0开始[1,2,3,4,5,6,7,8,9,10],参考注释中的位置图
                int[] columnIdx = { 3, 2, 4, 1, 3, 5, 0, 2, 4, 6 };
                //每列几个球,参考注释中的位置图
                int[] columnBallCount = { 1, 1, 2, 2, 2, 1, 1 };
                for (int i = 0; i < positionStr.Length; i++)//更新每一列现存的球个数
                {
                    if (positionStr[i] == '0')//当前列每击倒一球count-1
                    {
                        //表示第i个球所在的第数组columnIdx[i]列的球的个数columnBallCount[数组columnIdx[i]]减1
                        columnBallCount[columnIdx[i]]--;
                    }
                }
                //两列中的前一列
                for (int i = 0; i < columnBallCount.Length; i++)
                {
                    //两列中的后一列
                    for (int j = i + 1; j < columnBallCount.Length; j++)
                    {
                        //如果出现两列各自现存的球的个数都不为0
                        if (columnBallCount[i] != 0 && columnBallCount[j] != 0)
                        {
                            //遍历这两列中间的列
                            for (int k = i + 1; k < j; k++)
                            {
                                //中间列被击倒的情况就是split
                                if (columnBallCount[k] == 0)
                                {
                                    return 1;
                                }
                            }
                        }
                    }
                }
            }
            return 0;
        }

 

 

标签:columnBallCount,positionStr,int,++,算法,Split,columnIdx,保龄球,球瓶
From: https://www.cnblogs.com/xulian1990/p/17517252.html

相关文章

  • 一种基于DeltaE(CIE 1976)的找色算法
    //QuickFinder.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<iostream>#define_USE_MATH_DEFINES#include<cmath>#include<ctime>unsignedcharbuf[1080][1920][3];constfloatparam_13=1.0f/3.0f;constfloatparam_1......
  • 深入学习 JVM 算法 - 引用计数法
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌......
  • 垃圾收集策略与算法
    垃圾收集策略与算法程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于Java......
  • 敏感词过滤--DFA算法及代码案例
    我们应该都遇见过敏感词过滤,比如当我们输入一些包含暴力或者色情的文本,系统会阻止信息提交。敏感词过滤就是检查用户输入的内容有没有敏感词,检查之后有两个策略。直接阻止信息保存,接口返回错误信息允许信息保存,但是会把敏感词替换为***不管是哪种策略,首先都得找到是否包含敏......
  • Java 必会10大的经典算法
    Java必会10大的经典算法 https://github.com/hustcc/JS-Sorting-Algorithm冒泡排序:思路-两层循环;外层循环控制比较的轮数,内层循环控制每一轮的比较和交换。在每一轮中,通过比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。经过多轮的比较和交换,......
  • 数据结构与算法 - 链表
    双链表的的基本结构从STL源码抽出的基本双链表结构代码#ifndef_GRAVER_GLIB_LIST_H_#define_GRAVER_GLIB_LIST_H_#include<cstddef>#include"graver/util/log_util.h"namespacegraver{//内部结构与方法放在detailnamespacedetail{/***@brief链表结......
  • prim算法
    #include<stdio.h>#defineN20#defineTRUE1#defineINF32766#defineINFIN32767typedefstruct{ intvexnum,arcnum; charvexs[N]; intarcs[N][N];}MGraph;voidcreateMGraph_w(MGraph*g);voidprim(MGraph*g,intu);//创建带权无向图的邻接矩阵void......
  • 数据结构和算法-2023.06.29
    斐波那契数列初衷......
  • 欧几里得(及其扩展算法)
    欧几里得算法算法内容计算两个数的最大公约数的算法,也叫辗转相除法。即:gcd(a,b)=gcd(b,a%b)。数学证明设gcd(a,b)=d,则必定有:d|a且d|b,则必定有d|(ax+by)而a%b=a-a/b*b,所以d|(a%b),则d必定为b和a%b的约数,并且a%b必定小于a则d必定为b和a%b的最大公约数。-代码实现优美,太优......
  • MATLAB代码:基于粒子群算法的储能优化配置 关键词:储能优化配置 粒子群 储能充放电优
    MATLAB代码:基于粒子群算法的储能优化配置关键词:储能优化配置粒子群 储能充放电优化 参考文档:无明显参考文档,仅有几篇文献可以适当参考仿真平台:MATLAB平台采用粒子群实现求解优势:代码注释详实,适合参考学习,非目前烂大街的版本,程序非常精品,请仔细辨识 主要内容:建立了储能的......