所有考试的知识都属于选考科目考查正式的框框,可是读题、解题、算法设计

class Program
    {
        /*
         *     世界杯正在火热进行中,室友不惜睡眠时间,凌晨起来观看,但Njzy对此不是很感兴趣,他在思考一个问题: 
         * 假设世界杯观看台上有n个座位,排成一排,游客们来到这里自由占位。一般情况下,一个游客首先考虑的座位
         * 肯定是两边都没人的座位,其次考虑的是一边没人的座位,最后没得考虑,只能随便选一张两边都是人的座位。
         * 假设有n个游客依次到场占位,每个人都是按照上述规则选择自己的位子,Njzy就在思考这n个游客占位的可能顺
         * 序有多少种,你能帮助他? 输入描述: 有多组测试数据,每组测试数据包括一个正整数n(0<n<1000000)。 输出
         * 描述: 对于每组数据,由于答案可能会很大,所以输出:答案%1000000007
         * 
         * **************************************
         * 
         * 首先仔细读题:
         *  1.世界杯观看台上有n个座位,这n个座位有n个依次到场的游客来坐。
         *    解析:这里面隐藏两点(这两点很重要,如果没有读出这两点,计算会非常复杂):
         *                  a.座位数等于游客数
         *                  b.游客有入场顺序(此题中游客的入场顺序为1,2,3,4...)
         * (限制型排序算法)                 
         * 
         *                  
         *  2.首先考虑的座位肯定是两边都没人
         *  
         *  3.其次考虑的是一边没人的座位
         *  
         *  4.只能随便选一张两边都是人的座位
         *  
         * 
         * 输出结果:
         * 表示游客的选座方法(顺序号对应游客的入场顺序)。
         * 
         * 
         * 修改 _PersonCount 的值表示入场的人数(座数),为题中n(0<n<1000000)
         * 如果只求出总选座的方法,可以注释 Console.WriteLine(string.Join(",", _SiteArray));
         * 没有输出,提高程序的计算效率。
         */

        static void Main(string[] args)
        {
            //假设:人数、座位数(1,2,3...表示游客的入场顺序)
            int _PersonCount = 4;

            int[] _SiteArray = new int[_PersonCount];

            int personIndex = 1;
            int type = 2;

            switch (_SiteArray.Length)
            {
                case 0: type = -1; break;
                case 1: type = 0; break;
                case 2: type = 1; break;
                case 3: type = 2; break;
                default: type = 2; break;
            }

            FuncRun(ref _SiteArray, ref personIndex,  type);

            Console.WriteLine("总共 {0} 种选座的方法",ResCount);
        }

        static void Swap(ref int l, ref int r)
        {
            l = l ^ r;
            r = l ^ r;
            l = l ^ r;
        }

        static int ResCount = 0;

        static void FuncRun(ref int[] _SiteArray, ref int personIndex,  int type)
        {
            if (personIndex > _SiteArray.Length)
            {
                Console.WriteLine(string.Join(",", _SiteArray));
                ResCount++;
                return;
            }

            if (type == 2)
            {
                //---------------------------------------------------
                //首先考虑的座位肯定是两边都没人
                for (int i = 1; i < _SiteArray.Length - 1; i++)
                {
                    if (_SiteArray[i] > 0)
                        continue;

                    if (_SiteArray[i - 1] == 0 && _SiteArray[i + 1] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                }
                type--;
            }

            //---------------------------------------------------
            //其次考虑的是一边没人的座位
            if (type == 1)
            {
                if (personIndex <= 1 || _SiteArray.Length < 3)
                    return;

                if (_SiteArray[0] == 0 && _SiteArray[1] == 0)
                {
                    _SiteArray[0] = personIndex++;
                    FuncRun(ref _SiteArray, ref personIndex,  type);
                    //数据恢复
                    personIndex--;
                    _SiteArray[0] = 0;
                }

                for (int i = 1; i < _SiteArray.Length - 1; i++)
                {
                    if (_SiteArray[i] > 0)
                        continue;

                    if (_SiteArray[i - 1] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                    else if (_SiteArray[i + 1] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                }

                if (_SiteArray[_SiteArray.Length - 1] == 0 && _SiteArray[_SiteArray.Length - 2] == 0)
                {
                    _SiteArray[_SiteArray.Length - 1] = personIndex++;
                    FuncRun(ref _SiteArray, ref personIndex,  type);
                    //数据恢复
                    personIndex--;
                    _SiteArray[_SiteArray.Length - 1] = 0;
                }
                type--;
            }

            //---------------------------------------------------
            //只能随便选一张两边都是人的座位
            if (type == 0)
            {
                for (int i = 0; i < _SiteArray.Length; i++)
                {
                    if (_SiteArray[i] == 0)
                    {
                        _SiteArray[i] = personIndex++;
                        FuncRun(ref _SiteArray, ref personIndex,  type);
                        //数据恢复
                        personIndex--;
                        _SiteArray[i] = 0;
                    }
                }
            }
        }
    }

解密专业19期:神秘的中管文学

  在此此前在全校参预每年的ACM程序设计大赛,感觉程序算法照旧挺有意思的,那二日发现一个网站上放出部分算法试题,有点当年的那种感情,看到了,感觉能杀死,这就干掉它。近期还在店堂守夜中,闲着没事就试了试算法题。

图片 1

 if(type == 1){...} 这段里,虽然写的有点小复杂,但是是个简单的优化,呵呵。

高三家长必须精通的9条自主招生政策

考题来源:http://student.csdn.net/mcs/programming_challenges?&page=1
 观察世界杯(FIFA World Cup)

解密专业19期:神秘的中艺术学

  速手打,没有详尽检查,可能有通病请见谅,不过读题、解题、算法设计,一个众多。

解密专业19期:神秘的中工学

 

解密专业19期:神秘的中农学

  

自立招生 与自招相关的竞技 专家提出自招早做准备

  做事前,先看清,再入手。程序猿时间少于,不要轻易浪费,错误的解读,终会促成一个不科学的结果。

自立招生 与自招相关的比赛 专家提出自招早做准备

双五星级 名单你读懂了吗 为什么分成AB类

高三家长必须了解的9条自主招收政策

高三家长必须知道的9条自主招收政策

双五星级 名单你读懂了吗 为啥分成AB类

高三家长必须明白的9条自主招生政策

解密专业 聪明的子女学物理 经济学

综观各次音信技术选考,所有加试题从文化内容上说都未曾超过考试正式的局面。但以前四遍选考加试题得分意况来看,考生的得分率普遍不是很高。回看前几回选考,看看加试题考什么、怎么考,也许能得到部分新启示。

图片 2

考什么

所谓“知己知彼,长驱直入”,要在选考中发挥出较好的水平,必必要鲜明地握住选考内容。

综观前几回选考,加试题总分为15分,由3个挑选题(第10、11、12题,共6分)和2个非选择题(第16、17题,共9分)组成。从知识点分布来看,紧要集中在“多媒体消息编码”、“算法与VB程序设计”。除此之外,为了考试学生分析解决问题的力量,每趟试验的最后一题(第17题)都会油不过生一个综合题,此类综合题不囿于于某个经典算法,往往综合使用了程序设计中的种种法子与技能,大家得以称之为“开放性试题”。

更是分析,“算法与VB程序设计”主要考查了排序、查找、自定义函数、字符串处理等算法与知识。而If语句、循环语句及数组、常见对象属性操作等编程基础知识,几乎渗透到了每个试题。

图片 3

怎么考

按照上述梳理可见,所有考试的文化都属于选考科目考试正式的局面。但出于试题的样式以及考试切入点的新颖性,会给考生一种不确定感,总体来说这两回选考试题呈现出下列特征。

1。 传统题讲究全面而透彻

此地的传统题指的是问题熟谙、所需知识与求解目的之内涉及相比较直接的考题,如表1所示的4个有关多媒体新闻编码的课题。

那类试题的风味是讲求考生周全地了解相关的基础知识,并能直接选取这么些文化求解试题。如二〇一五年十一月选考的第10题:

[加试题]将一个时长为1分钟、采样频率为44.1kHz、量化位数为16、双声道未经压缩的Wave格式音频文件压缩为MP5格式文件,压缩后的MP4格式文件大小为940KB,则其缩减比约为

A、 11:1 B、 11:2 C、 11:4 D、 88:1

考生首先要领悟音频数据数字化的原理,然后结合音频采样特点,总括出该音频未经压缩的存储量为10335.9375KB,将此结果除以调减后的蕴藏容量即可获取削减比约为11∶1(选项A)。

再如二〇一六年七月、二〇一六年六月的第10题都是对准BMP图像数字化及存储量总括的考试,固然知识点相同,但试验的切入点差距。前者须求考生依据分辨率和各种像素存储所需的二进制位数计算图像的存储量,而后者要求考生依据存储量和分辨率反向统计每个像素存储所需的二进制位数。

图片 4

有奖调查:高三这一年得花多少钱

双一级 名单你读懂了吗 为啥分成AB类

自主招生 与自招相关的竞赛 专家提出自招早做准备

解密专业 聪明的孩子学物理 管历史学

2、 算法题尊崇考试算法原理和部署思想

学习算法与程序设计不仅要会沿用经典算法的主次框架来解决实际问题,更要在深深掌握算法原理的功底上,渐渐形成基于既有算法改造之上的算法设计力量。加试部分的算法与程序设计题,足够展现了那种价值取向。

如二零一五年7月的第16题,需要考生在知晓传统冒泡排序算法基础上,按照试题提醒分析原算法中留存的冗余处理,并按照革新后的算法须求改良程序中的错误。焦点部分的程序段如下:

图片 5

主旨考查的要害特征为:

略知一二冒泡排序算法的规律

冒泡排序的基本原理是每一次在一个未处理区间内扫描,发现逆序对数据后即开展互换,逐步减弱扫描区间直到区间长度为2。该算法的寻行数墨原理就是当剩余区间内数据没有察觉逆序对时,即可截至排序。如果考生对原冒泡排序算法的规律明白不够浓密,就不能设计出相应的巡回条件并做到改错。

驾驭冒泡排序程序外循环循环变量的功能原理

读本中冒泡排序算法用For i=1 to
n-1语句来支配外循环,循环变量i的严重性效用有多个,一是冒泡排序加工的遍数,二是为每遍的加工设定右边界。如若考生不可以对那么些规律有深厚的明白,就不可以精通外循环变量i的作用,也就不可以正确分析出Do
While循环语句中的条件进而正确写出核对后的结果(将符号(1)处的“or”改为“and”、将标志(2)处的“i”改为“i-1”)。

再如二〇一六年3月第11、12题,前年二月第11题,前年5月第12题。那几个课题首先必要选择已学经典算法的原理去领略新的顺序,更要依据新的题材去创立性地设总结法解决问题。以前年八月的第12题为例,试题须要考生使用已学的选料排序算法思想,完善创新后的在两者同时拓展分选的排序程序。该题的要紧内容如下:

图片 6图片 7

该题的试验特点有:

使用内化的挑三拣四排序思想掌握新的选项排序算法

主旨可以说是试验拔取排序算法,但又不囿于于考查教材中的接纳排序算法,而是要求使用内化的抉择排序中的“选用”思想,去辅助明白立异后的新排序算法。

基于新题材特点去创立性地设总结法

千锤百炼后的抉择排序算法带来了新的题目,即双方同时进行精选时所带来的数据交流的相互影响。为了缓解这些新题材,要求考生能根据题目特点去完善算法(设计思想)。新题材唯有在左端点是最大值时发出,顺藤摸瓜进行辨析,当最小值被换成到左端点时,最大值被换成到iMin所指地点,所以正确抉择为A。
图片 8

解密专业 聪明的孩子学物理 管经济学

3、 开放性试题强调解决问题

为了考试学生设统计法解决问题的力量,几遍选考都冒出了开放性试题。此类试题的性状是从未有过经典算法的阴影,考生在分析程序时无所适从依据某个经典算法的框架来帮衬分析、设总结法,目标是考试学生分析问题、成立性地设计算法解决问题的力量。

此地的算法设计不是从零初始的规划,而是根据试题给出的天职和算法处理特点,针对程序中的断层(须要改错或者补充)设总结法。如,二零一五年三月的第17题空格②(宗旨代码段如下)。

图片 9

根据试题给出的数额加密方法以及自定义函数Code2Char()的机能,考生如能设计出“取出字符串s中第c+1个字符,并将该字符通过函数重回”的算法,就能接纳字符串函数写出那里应填的代码“Mid(s,c+1,1)”。

怎么学

1、 明白程序设计本质,领会重点知识

微机进行自动化数据处理的本质是对具体数据的规律性重复处理,由此先后设计的基本就是抽象数据再一次处理的法则,并将规律通进度序再说显示。在那几个历程中,规律性的重新处理往往用循环结构来落实,而数据的规则化协会又通过数组来促成。因而,循环和数组就变成了程序设计中的关键知识。实际前五次选考的16个有关程序设计的加试题中,全部都关涉了循环语句和数组应用。为了真正控制这个重点知识,教学中得以透过变式应用来强化对这一个知识的知晓和控制,如原来用For语句完结的循环结构可考虑用Do
While语句来兑现,原来用多少个数组落成的次第考虑用一个数组来落到实处等。

除开数值处理,总结机处理的非数值数据主要就是字符串,加试题也反映了那些特性(前一次选考16个程序设计题中出现了3题)。为了熟谙精晓字符串处理的显要知识,平常教学中无法只停留在价值观的字符串表明式总计的局面,而要在各类字符串相关实际问题的解决进度中长远领悟字符串处理技术,养成字符串处理的发现和思索,否则就简单出现将“Mid(s,c+1,1)”写成“s(c+1)”的荒谬。能够借鉴的骨子里问题能够是“字符文本排版”、“身份证编号校验”等。作为一种发展性思考,教学中还应关心基于字符编码的字符串处理问题的化解。

2、 培育程序设计思想

稍加老师认为音讯技术试验是笔试,可以不用进行上机实践,只需加强笔试题磨炼即可。实际上,从眼前试题特征的解析可见,尽管是笔试题,加试题也曾经打消了本来“三项试验”中那种通过背代码即可解题的风骨,而须求在必然的次序设计思想辅助下才能科学地解题。更加地,为了考试考生的程序设计思想,加试题已经在逐步加强“设计”的轻重,而不再是纯粹的单个语句的互补或改错。如二〇一六年十月第11题,考生要求分析多少个语句的组成顺序,一定水准上还原了先后设计考查的原型。

先后设计思想是当学员面临一个实打实的题材时,在分析问题、设计算法与数据结构、将算法用一种程序设计语言表示并展开程序调试的历程中国和日本渐形成的。这么些进度往往是讨厌、充满挫折的,但幸好在这么一个不息试错、反思、调整、感悟的考虑辨析中,程序设计思想才能持续形成。可能一节课学生只调试了一个主次,但里面蕴蓄了基础知识的回看与行使、算法的设计与核对、程序代码的辨析等进度,其意思与成效远远出乎一节课三番五次讲多少个课题。可以从具体中持续发掘一些程序设计相关的资料,并经过实际编程来化解这么些题目,如超市货物销售计算、共享单车使用现状计算等。
图片 10

有奖调查:高三这一年得花多少钱

解密专业 聪明的儿女学物理 艺术学

3、 针对问题特点,运用分析策略和方法

针对笔试题形式出现的选考,还可提炼并运用一些通用性的先后分析策略与格局,升高解题的不利,如常识策略、黑匣子策略、对应政策等。

常识策略

算法与程序设计中,总存在有的争执稳定的程序落成方法,总计并动用那个艺术来赞助程序设计和剖析就是常识策略。如:在求和算法中,保存总和的变量一初步总要开首化为零;在求最大值算法中,结果变量先河化值总为一个极小值或者第一项数据值;等等。二〇一六年五月第16题就可采取常识策略来求最大值。

黑匣子策略

黑匣子策略指的是当对某一段程序无法完全清楚时(该有的程序段可以看作黑匣子),可以先暂时舍弃该模块内部怎么样处理的剖析,而只需从已知算法的完全布局出发,分析出该模块的机能(即知道该模块在做如何),并基于该意义去协助了然其他一些的程序代码。那样处理后,一方面可以临时跳出那些瓶颈,不致影响对总体问题的求解,另一方面,当其余部分明白透彻后,反过来又可帮忙我们对该模块算法的了解。

如,在二零一五年九月第17题中,若是第二回放程序对于自定义函数Code2Char有点费解,那么就不必纠结,只需抓住该函数的机能是“将参数c中的整数转换为加密后的字符”,然后使用对该意义的精晓,进一步分析出主程序中Code2Char(b1)和Code2Char(b2)分别在将1个字节的前4位和后4位二进制数对应的编码转换为加密字符。以此为突破口,就能渐渐梳理出算法并缓解问题。

图片 11

保护变量法

首要变量法指的是应用逆向思维,首先确定程序输出结果时的严重性数据,分析输出结果由哪些变量支配,将这一个变量作为主要变量,在分析程序时引发那么些重点变量,从关键变量值的变化规律去归咎程序的拍卖规律,进而稳步梳理出算法并成功解题。

如,二零一六年八月选考的第11题,试题给出三行代码(如下所示),须要确定那三行代码的逐条,使得程序(因篇幅有限,其余代码略)能判断s是或不是为对称字符串。

在该程序中k是必不可缺变量。结合最终输出语句及第二行代码,可见变量k在计算差距字符的个数。再组成程序中的其他代码,可进一步逆向推测出变量c1和c2各自代表左右两边对称地点上的字符。因此可逐步分析出不错结合顺序为③②①。

对应政策

对应政策指的是倘若已有先后的算法思想(能够是和谐归结得到,也可以是问题中付出),那么可在先后中寻觅算法种种处理步骤对应的口舌,然后依照算法须求分析程序中对应部分的意义并写出所需的代码。

二零一六年九月选考的第17题尽管难度较大,但借使丰硕运用对应政策,还能比较顺遂地解决问题。该题部分代码及问题中对应的艺术描述如下表所示。

图片 12

依据问题中的方法描述,示例3处境处理时应将a(pa+2)的值重复地赋予存放解压缩数据的数组b,所以空格②处代码应为“b(pb+i-1)=a(pa+2)”。而对此空格①处的代码设计,既可对应问题中的方法描述得到,也可透过示范3动静处理中的“pa=pa+3”对应分析得到。

一句话来说,加试题重在基本原理通晓及利用、信息技术学科思维的试验,而盲目的题海战术只好徒增师生负责。音信技术教学应顺应大势,着眼学科骨干素养、遵从实践性和综合性,指引学员在化解实际问题的进度中稳步进步音信素养。

本文小编:吴建峰 高级教授

原文均刊载于《西藏试验》期刊二零一七年第10期

自主招生 与自招相关的竞技 专家提出自招早做准备

有奖调查:高三这一年得花多少钱

双甲级 名单你读懂了吗 为啥分成AB类

有奖调查:高三这一年得花多少钱

相关文章