算法笔记_079:蓝桥杯练习 区间k大数查询(Java)

/目录1问题描述2解决方案问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式总共输出m行,每行一个数,表示询问的答案。样例输入5123452152232样例输出42数据规模与约定对于30%的数据,n,m<=100;对于100%的数据,n,m<=1000;保证k<=(r-l+1),序列中的数<=106。本题主要考查排序,考虑到时间效率和稳定性,此题选择合并排序最佳。 具体代码如下:importjava.util.Scanner;publicclassMain{//对数组array中下标start到end中的元素进行归并并排,求得该区间的降序排列publicvoidmergeSort(int[]array,intstart,intend){if(end-start>=1){int[...

算法笔记_080:蓝桥练习 队列操作(Java)

/目录1问题描述2解决方案问题描述  队列操作题。根据输入的操作命令,操作队列(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。输入格式  第一行一个数字N。  下面N行,每行第一个数字为操作命令(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。输出格式  若干行每行显示一个2或3命令的输出结果。注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。样例输入711915623232样例输出191560no数据规模和约定  1<=N<=50特别注意:注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。 具体代码如下:importjava.util.ArrayList;importjava.util.Scanner;publicclassMain{publicvoidprintResult(int[][]operation){ArrayList<Integer>list=newArrayList<Integer>();for(inti=0;i&...

算法笔记_081:蓝桥练习 算法提高 矩阵乘法(Java)

/目录1问题描述2解决方案问题描述  有n个矩阵,大小分别为a0*a1,a1*a2,a2*a3,...,a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。  两个大小分别为p*q和q*r的矩阵相乘时的运算次数计为p*q*r。输入格式  输入的第一行包含一个整数n,表示矩阵的个数。  第二行包含n+1个数,表示给定的矩阵。输出格式  输出一个整数,表示最少的运算次数。样例输入3110520样例输出150数据规模和约定  1<=n<=1000,1<=ai<=10000。首先说一下这题解题思路(PS:主要考查动态规划法思想):引用文末参考资料1中配图(详情讲解请参考参考资料1哦): 下面代码在系统中评分为70分,不过我用参考资料1中的代码在系统中测评为100分。下面代码仅供参考~  具体代码如下:importjava.util.Scanner;publicclassMain{publicvoidprintResult(int[]arrayMatrix){intlength=arrayMatrix.lengt...

算法笔记_082:蓝桥练习 12-1三角形(Java)

/目录1问题描述2解决方案问题描述  为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。样例输出与上面的样例输入对应的输出。例:数据规模和约定  输入数据中每一个数的范围。  例:doule型表示数据。本题主要考查三角形相关数学知识,刚开始做的时候,我对重心和外心的计算公式一点都记不起来,无语中...,后来,计算外心的时候,也出错,因为没有单独划分出横坐标相等的情况,导致计算出错。 具体代码如下:importjava.util.Scanner;publicclassMain{//计算三角形三条边的长publicdouble[]getABC(double[][]point){double[]edge=newdouble[3];doublex1=point[0][0],y1=point[0][1];doublex2=point[1][0],y2=point[1][1];doublex3=point[2][0],y3=poin...

算法笔记_083:蓝桥练习 合并石子(Java)

/目录1问题描述2解决方案问题描述  在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。输入格式  输入第一行包含一个整数n,表示石子的堆数。  接下来一行,包含n个整数,按顺序给出每堆石子的大小。输出格式  输出一个整数,表示合并的最小花费。样例输入512345样例输出33数据规模和约定  1<=n<=1000,每堆石子至少1颗,最多10000颗。本题主要考查动态规划法思想。刚开始做的时候,使用贪心法求解,即每次选择相邻两个和为最小的一组合成堆,结果评分为10分,后来仔细想了一下,贪心法不能达到最优解,唯有使用动态规划法求解。该题几乎和训练题集中的矩阵相乘一样,具体思想讲解,请参考本人另一篇博客:算法笔记_081:蓝桥练习算法提高矩阵乘法(Java)  具体代码如下:importjava.util.Scanner;publicclassMain{publiclonggetSum(long[]A,inta,intb){longsum=0;for...

算法笔记_084:蓝桥练习 11-1实现strcmp函数(Java)

/目录1问题描述2解决方案问题描述  自己实现一个比较字符串大小的函数,也即实现strcmp函数。函数:intmyStrcmp(char*s1,char*s2)按照ASCII顺序比较字符串s1与s2。若s1与s2相等返回0,s1>s2返回1,s1<s2返回-1。具体来说,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇''为止(注意''值为0,小于任意ASCII字符)。如:  "A"<"B"  "a">"A"  "computer">"compare"  "hello"<"helloworld"样例输出数据规模和约定  字符串长度<100。  具体代码如下:importjava.util.Scanner;publicclassMain{publicvoidprintResult(StringA,StringB){intlenA=A.length();intlenB=B.length();if(lenA<1||lenB<1)return;char[]arrayA=A.toCharA...

算法笔记_085:蓝桥练习 9-3摩尔斯电码(Java)

/目录1问题描述2解决方案问题描述  摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用'*'表示'.',中间空格用'|'表示,只转化字符表。  摩尔斯码定义见:http://baike.baidu.com/view/84585.htm?fromId=253988。提示  清橙进行评测时,输入是以EOF结尾的,而不是换行符。(EOF不是一个字符,“以EOF结尾”是一种通俗但不严谨的说法。)因此可以通过以下方式之一获取输入:  1.一次读入整行字符串,再进行后续解析。  2.使用getchar或scanf一次读入一个字符,通过它们的返回值判断输入结束。样例输出 具体代码如下:importjava.util.ArrayList;importjava.util.Scanner;publicclassMain{publicchargetOneChar(StringA){charresult=0;if(A.equals("*-"))result='a';elseif(A.equal...

算法笔记_086:蓝桥练习 9-2 文本加密(Java)

/目录1问题描述2解决方案问题描述  先编写函数EncryptChar,按照下述规则将给定的字符c转化(加密)为新的字符:"A"转化"B","B"转化为"C",......"Z"转化为"a","a"转化为"b",......,"z"转化为"A",其它字符不加密。编写程序,加密给定字符串。样例输出与上面的样例输入对应的输出。例:数据规模和约定  输入数据中每一个数的范围。  例:50个字符以内无空格字符串。  具体代码如下:importjava.util.Scanner;publicclassMain{publicvoidEncryptChar(StringA){if(A.length()<1)return;StringBuilderresult=newStringBuilder("");char[]arrayA=A.toCharArray();for(inti=0;i<A.length();i++){chartemp=arrayA[i];if(temp>='a'&&temp<'z'||temp>='A'&&...

算法笔记_087:蓝桥练习 9-1九宫格(Java)

/目录1问题描述2解决方案问题描述  九宫格。输入1-9这9个数字的一种任意排序,构成3*3二维数组。如果每行、每列以及对角线之和都相等,打印1。否则打印0。样例输出与上面的样例输入对应的输出。例:数据规模和约定  输入1-9这9个数字的一种任意排序。 具体代码如下:importjava.util.Scanner;publicclassMain{publicbooleanisOK(int[]A){intsum=A[0]+A[1]+A[2];//判断行for(inti=3;i<=6;i=i+3){if(sum!=A[i]+A[i+1]+A[i+2])returnfalse;}//判断列for(inti=0;i<=2;i++){if(sum!=A[i]+A[i+3]+A[i+6])returnfalse;}//判断对角线if(sum!=A[0]+A[4]+A[8])returnfalse;if(sum!=A[2]+A[4]+A[6])returnfalse;returntrue;}publicstaticvoidmain(String[]args){Maintest=...

算法笔记_088:蓝桥练习 8-1因式分解(Java)

/目录1问题描述2解决方案问题描述  设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出2*3。输入20,输出2*2*5。样例  与上面的样例输入对应的输出。  例:数据规模和约定  输入数据中每一个数在int表示范围内。 具体代码如下:importjava.util.ArrayList;importjava.util.Scanner;publicclassMain{//获取2~A之间的所有质数publicArrayList<Integer>getPrimes(intA){ArrayList<Integer>list=newArrayList<Integer>();list.add(2);for(inti=3;i<=A;i++){if(judgePrime(i))list.add(i);}returnlist;}//判断数A是否为质数,A为默认大于等于3的数publicbooleanjudgePrime(intA){for(intj=2;j<=A;j++){if(A%j==0){returnfalse;}if(j...

算法笔记_089:蓝桥练习 7-2求arccos值(Java)

/目录1问题描述2解决方案问题描述  利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1,1],返回值为[0,PI]。要求结果准确到小数点后5位。(PI=3.1415926)  提示:要达到这种程度的精度需要使用double类型。样例输入0.5样例输出数据规模和约定  -1<=x<=1,0<=arccos(x)<=PI。本题借用反三角函数,考查我们对于二分法思想的运用。易知cos(a)=b,那么arccos(b)=a。那么现在求取arccos(x),设其结果为result。那么当cos(result)无穷趋近x值时,则说明,result则为我们需要求取的值,下面请看一张示意图: 这题提交了好几次,因为觉得自己思路是没有问题,但是,提交后的评分结果一直为33分,后来用Java给定的Math.acos()函数,对比后,发现是自己设定的取值范围不够精确,导致计算结果偏大。即:Math.abs(judge)>0.000000000000001。第一次做的时候,是这样:Math.abs(judge)>0.00...

算法笔记_090:蓝桥练习 7-1用宏求球的体积(Java)

/目录1问题描述2解决方案问题描述  使用宏实现计算球体体积的功能。用户输入半径,系统输出体积。不能使用函数,pi=3.1415926,结果精确到小数点后五位。样例输入一个满足题目要求的输入范例。例:1.0样例输出与上面的样例输入对应的输出。例:数据规模和约定  输入数据中每一个数的范围。  数据表示采用double类型。具体代码如下:importjava.util.Scanner;publicclassMain{publicfinalstaticdoublePI=3.1415926;publicvoidprintResult(doubler){doubleV=4*PI*r*r*r/3;System.out.printf("%.5f",V);return;}publicstaticvoidmain(String[]args){Maintest=newMain();Scannerin=newScanner(System.in);doubler=in.nextDouble();test.printResult(r);}} ...

算法笔记_091:蓝桥练习 递推求值(Java)

/目录1问题描述2解决方案问题描述  已知递推公式:  F(n,1)=F(n-1,2)+2F(n-3,1)+5,  F(n,2)=F(n-1,1)+3F(n-3,1)+2F(n-3,2)+3.  初始值为:F(1,1)=2,F(1,2)=3,F(2,1)=1,F(2,2)=4,F(3,1)=6,F(3,2)=5。  输入n,输出F(n,1)和F(n,2),由于答案可能很大,你只需要输出答案除以99999999的余数。输入格式  输入第一行包含一个整数n。输出格式  输出两行,第一行为F(n,1)除以99999999的余数,第二行为F(n,2)除以99999999的余数。样例输入4样例输出1421数据规模和约定  1<=n<=10^18。本题直接用传统的递推求解,结果会运行超时。此处要利用要构造矩阵,来计算相应结果。首先看一下参考资料1中对于斐波那契数,构造矩阵的示例: 其具体相关理解,请参考文末参考资料1哦。本题构造的矩阵如下:对应1*8的矩阵为[f(3,1),f(3,2),f(2,1),(2,2),f(1,1),f(1,2),3,5]publicfinalsta...

算法笔记_092:蓝桥练习 c++_ch04_02_修正版(Java)

/目录1问题描述2解决方案  【题目描述】  实现一个时间类Time。将小时,分钟和秒存储为int型成员变量。要求该类中包含一个构造函数,访问用的函数,一个推进当前时间的函数adv(),一个重新设置当前时间(即将当前时间设为00:00:00)的函数reset()和输出结果函数print()。注意时间按数字式电子表格式显示,即小时、分、秒分别用两位表示,如果其中之一小于10,则前方补0,如22:01:00(中间不含空格),另外按该格式依次输出时、分、秒后,以endl结尾。当输入时间超出合法范围(提示:注意上下界)时,请自动按照24小时制进行转换,请务必注意时分秒为负值时的处理,如输入25:00:61,则输出应为01:01:01,输入-1:-1:-1,应该输出22:58:59。  第一步:依据题意定义Time类  classTime  {  //请补充  };  第二步:利用如下测试程序对所编写的Time类进行测试。  intmain()  {  //当前时间  inthour,minute,second;  //时间增量  intincr_hr,incr_min,incr_sec;  c...

算法笔记_093:蓝桥练习 Problem S4: Interesting Numbers 加强版(Java)

/目录1问题描述2解决方案ProblemDescription  Wecallanumber interesting,ifandonlyif:  1.Itsdigitsconsistsofonly0,1,2and3,andallthesedigitsoccurredatleastonce.  2.Insidethisnumber,all0soccurbeforeany1s,andall2soccurbeforeany3s.  Therefore,thesmallestinterestingnumberaccordingtoourdefinitionis2013.Therearetwomoreintersetingnumberof4digits:2031and2301.  Yourtaskistocalculatethenumberofinterestingnumbersofexactly n digits.Astheanswermightbeverylarge,youonlyneedtooutputtheanswermodulo1000000007.Inp...
首页上一页...1415161718...下一页尾页