蓝桥杯算法提高题与官方答案(7)

2019-03-09 13:45

编号:ADV-19 题目:项链 关键字:循环 类型:vip试题 问题描述

由 n(1≤n≤100) 个珠子组成的一个项链,珠子有红、蓝、白三种颜色,各种颜色的珠子的安排顺序由键盘输入的字符串任意给定。蓝色用小写字母b表示,红色用小写字母r表示, 白色用小写字母w表示.

假定从项链的某处将其剪断,把它摆成一条直线。先从左端向右收集同色珠子,遇到第一个异色珠子时停止. 收集过程中, 白色是一种特殊颜色, 既可以看成红色也可以看成蓝色。然后再从剩余珠子的右端向左重复上述过程。 例如:对下图一所示的项链, 如果从图一中标记的位置0处剪断, 则按顺时针顺序得到wbbbwwrrbwbrrwb(如图二所示)。这时从左端开始收集可以得到wbbbww, 共6个珠子;然后从剩余珠子右端开始收集得到wb,共2个珠子。这种剪法共可收集到6+2=8个珠子。 如果从图一中标记的位置4处剪断, 则按顺时针顺序得到wwrrbwbrrwbwbbb(如图二所示)。这时从左端收集可以得到wwrr,共4个珠子;然后从剩余珠子右端收集可以得到wbwbbb,共6个珠子。这种剪法共可收集到4+6=10个珠子。

要求: 在项链中选择合适的剪断位置, 使得从左右两端收集到的珠子数目之和最大,输出收集到的珠子数的最大值M。

ps:这里有一张图片,目前还没有找到-_-! 输入格式

由小写字母b,r,w组成的字符串。此字符串记录了一个首尾相接的项链从某处断开后,按顺时针顺序得到的珠子的直线排列。 输出格式

收集到的珠子数的最大值 M 样例输入

wbbbwwrrbwbrrwb 样例输出 10

参考代码:

import java.text.DecimalFormat; import java.util.Scanner;

public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String string = scanner.nextLine(); int ma = 0; for (int i = 0; i < string.length(); i++) { int mm = get(string, i);

}

}

ma = mm > ma ? mm : ma; }

System.out.println(ma);

private static int get(String string, int i) { String s1 = string.substring(i) + string.substring(0, i); int j1 = 0; int j2 = 0; char c1 = 'w'; char c2 = 'w'; for (int k = 0; k < s1.length(); k++) { if (s1.charAt(k) != c1) { c1 = s1.charAt(k); break; } } for (int k = s1.length() - 1; k > 0; k--) { if (s1.charAt(k) != c2) { c2 = s1.charAt(k); break; } } for (int j = 0; j < s1.length(); j++) { if (s1.charAt(j) == c1 || s1.charAt(j) == 'w') j1++; else { break; } } for (int j = s1.length() - 1; j >0; j--) { if (s1.charAt(j) == c2 || s1.charAt(j) == 'w') j2++; else { break; } }

}

if (j1 == s1.length()) return j1; return j1 + j2;

编号:ADV-20

题目:交换Easy 关键字:循环 类型:vip试题 问题描述

给定N个整数组成的序列,每次交换当前第x个与第y个整数,要求输出最终的序列。 输入格式

第一行为序列的大小N(1<=N<=1000)和操作个数M(1<=M<=1000)。 第二行包含N个数字,表示初始序列。

接下来M行,每行两个整数x,y (1<=x,y<=N),表示要交换的两个整数。在一次交换中,如果x和y相等,则不会改变序列的内容。 输出格式

输出N行,为交换后的序列中的数。 样例输入 5 2

1 2 3 4 5 1 2 3 4

样例输出 2 1 4 3 5

参考代码:

import java.util.*;

public class Main { static int a[]=new int[1001]; static int b[]=new int[2];

public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); for(int i=0;i

for(int j=0;j

} else a[x-1]=a[y-1]; } for(int i=0;i

编号:ADV-21 题目:多项式输出 关键字:

类型:VIP试题 问题描述:

一元n 次多项式可用如下的表达式表示: f(x)=a[n]x^n+a[n-1]x^(n-1)+...+a[1]x+a[0], a[n]!=0

其中,a[i]x^i称为i 次项, a[i]称为i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

1. 多项式中自变量为x,从左到右按照次数递减顺序给出多项式。 2. 多项式中只包含系数不为0 的项。

3. 如果多项式n 次项系数为正,则多项式开头不出现“+”号,如果多项式n 次项系数为负,则多项式以“-”号开头。

4. 对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于0 次的项,其系数的绝对值为1,则无需输出1)。如果x 的指数大于1,则接下来紧跟的指数部分的形式为“x^b”,其中b 为x 的指数;如果x 的指数为1,则接下来紧跟的指数部分形式为“x”;如果x 的指数为0,则仅需输出系数即可。

5. 多项式中,多项式的开头、结尾不含多余的空格。 输入格式

输入共有2 行

第一行1 个整数,n,表示一元多项式的次数。

第二行有n+1 个整数,其中第i 个整数表示第n-i+1 次项的系数,每两个整数之间用空格隔开。

1 ≤ n ≤ 100,多项式各次项系数的绝对值均不超过100。 输出格式

输出共1 行,按题目所述格式输出多项式。 样例输入 5

100 -1 1 -3 0 10 样例输出

100x^5-x^4+x^3-3x^2+10 样例输入 3

-50 0 0 1

样例输出 -50x^3+1 参考代码:

import java.util.Scanner; public class Main{

public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); String s=\ int m=n;

boolean b=true; for(int i=0;i1) s=s+\ else if(a==1) s=s+\ else if(a==-1) s=s+\ break; }

if(a>1) if(b)

s=s+a+\ else

s=s+\ else if(a<-1)

s=s+a+\ else if(a==-1||a==1) if(a==-1)

s=s+\ else if(a==1&&b) s=s+\ else s=s+\ m--; b=false; }

m=sc.nextInt(); if(m<0)


蓝桥杯算法提高题与官方答案(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:英语名篇背诵手册+中英对照

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: