蓝桥杯java历年真题及答案整理(共129道题目及答案)

蓝桥杯java历年真题及答案整理(共129道题目及答案)
蓝桥杯java历年真题及答案整理(共129道题目及答案)

蓝桥杯java历年真题及答案整理(参考网络资料整理出来)

1.字符排序

算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。

package Question1_9;

import java.util.Scanner;

import java.util.Vector;

public class Question1 {

public static long count=0;

private void fullPermutation(Vectorsourse, Vector result) {

if(sourse.size()==0){

for (int i = 0; i < result.size(); i++) {

System.out.print(result.elementAt(i));

}

System.out.print("\n");

count++;

return;

}

for (int i = 0; i < sourse.size(); i++) {

Vectortsourse=new Vector(sourse);

Vectortresult=new Vector(result);

tresult.add(sourse.elementAt(i));

tsourse.remove(i);

new Question1().fullPermutation(tsourse, tresult);

}

}

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt();

Vector sourse=new Vector();

Vector result=new Vector();

for (int i = 0; i < n; i++) {

sourse.add((char)('A'+i));

}

new Question1().fullPermutation(sourse, result);

System.out.println(Question1.count);

}

}

方法二:

import java.util.ArrayList;

import java.util.Iterator;

import java.util.LinkedHashSet;

import java.util.List;

import java.util.Scanner;

import java.util.Set;

public class Demo03 {

// 去掉重复元素,放入lis

public static void removeDuplicate(String s,Set lis){

for(char x:s.toCharArray()){

lis.add(x);

}

}

// 为方便操作将sets 转lis

public static void convert(List lis,Set sets){

Iterator iter = sets.iterator();

while(iter.hasNext()){

lis.add(iter.next());

}

}

// 检测符合条件的元素组合

public static void check(Set sets){

List lis = new ArrayList();

convert(lis,sets); // 为方便操作将sets 转lis

StringBuffer sb = new StringBuffer();

for(int i=0;i

for(int j=i+1;j+1

sb.append(lis.get(i));

sb.append(lis.get(j));

sb.append(lis.get(k));

System.out.println(sb); // 输出组合

sb.setLength(0); // 清空

}

}

}

}

public static void main(String[] args){

Scanner scan = new Scanner(System.in);

System.out.println("输入串(不大于30个字符)。");

String s = scan.nextLine();

Set sets = new LinkedHashSet();

removeDuplicate(s,sets); // 去掉重复元素,放入lis

check(sets); // 检测符合条件的元素组合

}

}

运行结果:

输入串(不大于30个字符)。

abcd

abc

abd

acd

bcd

2.串的简单处理

串的处理

在实际的开发工作中,对字符串的处理是最常见的编程任务。

本题目即是要求程序对用户输入的串进行处理。具体规则如下:

1. 把每个单词的首字母变为大写。

2. 把数字与字母之间用下划线字符(_)分开,使得更清晰

3. 把单词中间有多个空格的调整为1个空格。

例如:

用户输入:

you and me what cpp2005program

则程序输出:

You And Me What Cpp_2005_program

用户输入:

this is a 99cat

则程序输出:

This Is A 99_cat

我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。

假设用户输入的串长度不超过200个字符。

package Question1_9;

import java.util.Scanner;

import java.util.Vector;

public class Question2 {

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

String string=scanner.nextLine();

Vectorvector=new Vector();

for (int i = 0; i < string.length(); i++) {

vector.add(string.charAt(i));

}

try {

int index=0;

while (index

if(index==0&&vector.elementAt(index)>='a'&&vector.elementAt(index)<='z'){

vector.set(index, (char)(vector.elementAt(index)-('a'-'A')));

}else if(vector.elementAt(index-1)==' '&&vector.elementAt(index)==' '){

vector.remove(index);

index--;

}else if (vector.elementAt(index-1)==' '&&(vector.elementAt(index)>='a'&&vector.elementAt(index)<='z')) {

vector.set(index, (char)(vector.elementAt(index)-('a'-'A')));

}else

if((vector.elementAt(index)>='a'&&vector.elementAt(index)<='z')&&(vector.elementAt(index-1)>='0'&&vector.elementAt(in dex-1)<='9')){

vector.add(index, '_');

index++;

}else

if((vector.elementAt(index-1)>='a'&&vector.elementAt(index-1)<='z')&&(vector.elementAt(index)>='0'&&vector.elementAt( index)<='9')){

vector.add(index, '_');

index++;

}

index++;

}

for (int i = 0; i

System.out.print(vector.elementAt(i));

}

System.out.println();

} catch (ArrayIndexOutOfBoundsException e) {

// TODO: handle exception

}

}

}

运行结果:

you and me what cpp2005program

You And Me What Cpp_2005_program

方法二:

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/*

* 本题目即是要求程序对用户输入的串进行处理。具体规则如下:

*1. 把每个单词的首字母变为大写。

*2. 把数字与字母之间用下划线字符(_)分开,使得更清晰

*3. 把单词中间有多个空格的调整为1个空格。

*我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格

分隔。

*假设用户输入的串长度不超过200个字符。

*/

public class SimpleString {

public static void main(String args[]){

String str="";

str=(new Scanner(System.in)).nextLine();

String []str1=str.split("[ ]+");

for(int i=0;i

String s="";

for(int i=0;i

{

s+=str1[i]+" ";

}

s+=str1[str1.length-1];

Pattern p=https://www.360docs.net/doc/b716067168.html,pile("([0-9]+)");

Matcher m=p.matcher(s);

String fin="";

int st=0;

while(m.find()){

int start=m.start();

int end=m.end();

fin+=s.substring(st,start);

if(s.charAt(start-1)!=' ')fin+="_";

fin+=m.group(1);

if(s.charAt(end)!=' ')fin+="_";

st=end;

}

if(st

System.out.println(fin);

}

}

方法三:

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Demo02 {

public static void print(String[] s){

for(int i=0;i

System.out.print(s[i]+" ");

}

System.out.println(s[s.length-1]);

}

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

String s = scan.nextLine();

String[] ss = s.split("[\\s]+");

for(int i=0;i

String up = (""+ss[i].charAt(0)).toUpperCase(); // 大写

StringBuffer sb = new StringBuffer(ss[i]);

ss[i] = sb.replace(0, 1, up).toString();

Matcher m = https://www.360docs.net/doc/b716067168.html,pile("\\d+").matcher(ss[i]);

while(m.find()){

String num = new String(m.group());

String num2 = num;

num2 = "_"+num+"_"; // 数字前添加"_"

ss[i] = ss[i].replace(num, num2);

if(ss[i].startsWith("_")){ // 去头"_"

ss[i] = ss[i].substring(1);

}

if(ss[i].endsWith("_")){ // 去尾"_"

ss[i] = ss[i].substring(0,ss[i].length()-1);

}

}

}

print(ss);

}

}

运行结果:

you and me what cpp2005program

You And Me What Cpp_2005_program

3.猜算式

看下面的算式:

□□ x □□ = □□ x □□□

它表示:两个两位数相乘等于一个两位数乘以一个三位数。

如果没有限定条件,这样的例子很多。

但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。该算式中1至9的每个数字出现且只出现一次!

比如:

46 x 79 = 23 x 158

54 x 69 = 27 x 138

54 x 93 = 27 x 186

.....

请编程,输出所有可能的情况!

注意:

左边的两个乘数交换算同一方案,不要重复输出!

不同方案的输出顺序不重要

package Question1_9;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import java.util.Vector;

public class Question3 {

public static long count=0;

public static List> filteredNonRedundantResults;

private static boolean isfilter(Vector result) {

int a=(result.elementAt(0)-'0')*10+(result.elementAt(1)-'0');

int b=(result.elementAt(2)-'0')*10+(result.elementAt(3)-'0');

int c=(result.elementAt(4)-'0')*10+(result.elementAt(5)-'0');

int

d=(result.elementAt(6)-'0')*100+(result.elementAt(7)-'0')*10+(result.elementAt(8)-' 0');

if(a*b==c*d){

return true;

}

return false;

}

public static void print(Vectorvector) {

System.out.printf("%c%c x %c%c = %c%c x %c%c%c",vector.elementAt(0),vector.elementAt(1),vector.elementAt(2),vector.elemen tAt(3),vector.elementAt(4),vector.elementAt(5),vector.elementAt(6),vector.elementAt (7),vector.elementAt(8));

}

private static void fullPermutation(Vectorsourse, Vector result) {

if(sourse.size()==0&&isfilter(result)){

boolean exit=false;

for (int i = 0; i < filteredNonRedundantResults.size(); i++) {

int ra=(result.elementAt(0)-'0')*10+(result.elementAt(1)-'0');

int rb=(result.elementAt(2)-'0')*10+(result.elementAt(3)-'0');

int

fa=(filteredNonRedundantResults.get(i).elementAt(0)-'0')*10+(filteredNonRedundantRe sults.get(i).elementAt(1)-'0');

int

fb=(filteredNonRedundantResults.get(i).elementAt(2)-'0')*10+(filteredNonRedundantRe sults.get(i).elementAt(3)-'0');

if(ra==fb&&rb==fa){

exit=true;

break;

}

}

if(exit==false){

filteredNonRedundantResults.add(new Vector(result));

}

return;

}

for (int i = 0; i < sourse.size(); i++) {

result.add(sourse.elementAt(i));

sourse.remove(i);

fullPermutation(sourse, result);

sourse.add(i, result.elementAt(result.size()-1));

result.remove(result.size()-1);

}

}

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

int n=9;

Vector sourse=new Vector();

Vector result=new Vector();

for (int i = 1; i <= n; i++) {

sourse.add((char)('0'+i));

}

Question3.filteredNonRedundantResults=new ArrayList>();

Question3.fullPermutation(sourse, result);

for (int i = 0; i < Question3.filteredNonRedundantResults.size(); i++) { Question3.print(Question3.filteredNonRedundantResults.get(i));

System.out.println();

}

}

}

运行结果:

46 x 79 = 23 x 158

54 x 69 = 27 x 138

54 x 93 = 27 x 186

58 x 67 = 29 x 134

58 x 69 = 23 x 174

58 x 73 = 29 x 146

58 x 96 = 32 x 174

63 x 74 = 18 x 259

64 x 79 = 32 x 158

73 x 96 = 12 x 584

76 x 98 = 14 x 532

方法二:

import java.util.List;

import java.util.ArrayList;

public class Demo01 {

static List lis = new ArrayList(); // 结果1(有重复的结果)

static List lis2 = new ArrayList(); // 结果2(去重复后的结果)

// 初始化数组为1~9

public static void init(int[] n) {

for(int i=0;i<9;i++){

n[i] = i+1; // 初始化数组为1~9

}

}

// 是否重复

public static boolean isDup(String s1,String s2){

String a1 = s1.substring(0,2);

String a2 = s1.substring(2,4);

String b1 = s2.substring(0,2);

String b2 = s2.substring(2,4);

if(a1.equals(b2)&&a2.equals(b1)){

return true;

}else{

return false;

}

}

// 去除lis重复元素

public static void removeDuplicate(){

lis2.add(lis.get(0));

for(int i=1;i

boolean flag = true; // 标记是否重复

for(int j=0;j

flag = isDup(lis.get(i),lis2.get(j)); // 判断是否重复

if(flag) break; // 如果元素重复,直接跳出这层循环,测试下个数据}

if(!flag){

lis2.add(lis.get(i)); // 不重复,则添加

}

}

}

// 输出

public static void print(){

for(String s:lis2){

String a = s.substring(0,2);

String b = s.substring(2,4);

String c = s.substring(4,6);

String d = s.substring(6);

System.out.println(a+" x "+b+" = "+c+" x "+d);

}

}

// 检测结果,符合条件的输出

public static void check(int[] n){

StringBuffer sb = new StringBuffer();

for(int x:n){ // 数字数组转为字符串

sb.append(x);

}

int a = Integer.parseInt(sb.substring(0,2).toString());

int b = Integer.parseInt(sb.substring(2,4).toString());

int c = Integer.parseInt(sb.substring(4,6).toString());

int d = Integer.parseInt(sb.substring(6).toString());

if(a*b==c*d){

lis.add(sb.toString()); // 添加结果

}

}

// 全排列进行测试

public static void allSort(int[] n,int start,int end){

if(start>=end){

check(n); // 检测结果,符合条件的输出

return ;

}else{

for(int i=start;i<=end;i++){

int t = n[start]; // 交换元素

n[start] = n[i];

n[i] = t;

// 递归全排列

allSort(n,start+1,end);

t = n[start]; // 还原元素

n[start] = n[i];

n[i] = t;

}

}

}

public static void fun(){

int[] n = new int[9];

init(n); // 初始化数组为1~9

allSort(n,0,n.length-1); // 全排列测试

removeDuplicate(); // 去除重复元素

}

public static void main(String[] args){

fun(); //

print(); // 输出结果

}

}

运行结果:

46 x 79 = 23 x 158

54 x 69 = 27 x 138

54 x 93 = 27 x 186

58 x 67 = 29 x 134

58 x 69 = 23 x 174

58 x 73 = 29 x 146

58 x 96 = 32 x 174

63 x 74 = 18 x 259

64 x 79 = 32 x 158

73 x 96 = 12 x 584

76 x 98 = 14 x 532

4.Excel地址转换

Excel是最常用的办公软件。每个单元格都有唯一的地址表示。比如:第12行第4列表示为:“D12”,第5行第255列表示为“IU5”。

事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址。

第12行第4列表示为:“R12C4”,第5行第255列表示为“R5C255”。

你的任务是:编写程序,实现从RC地址格式到常规地址格式的转换。

【输入、输出格式要求】

用户先输入一个整数n(n<100),表示接下来有n行输入数据。

接着输入的n行数据是RC格式的Excel单元格地址表示法。

程序则输出n行数据,每行是转换后的常规地址表示法。

例如:用户输入:

2

R12C4

R5C255

则程序应该输出:

D12

IU5

package Question1_9;

import java.util.Scanner;

import java.util.Stack;

import java.util.Vector;

public class Question4 {

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt();

scanner.nextLine(); //必须加上的,不然会导致输入不准确!

while (n>0) {

String string=scanner.nextLine();

String strings[]=string.split("C");

strings[0]=strings[0].substring(1, strings[0].length());

int

hangshu=Integer.parseInt(strings[0]),lieshu=Integer.parseInt(strings[1]);//获取行数和列数/*

* 对列数进行变换

*/

Stackstack=new Stack();

while(lieshu>0){

if(lieshu%26==0){

stack.push('Z');

lieshu=lieshu/26-1;

}else {

stack.push((char)('A'-1+lieshu%26));

lieshu=lieshu/26;

}

}

while (!stack.empty()) {

System.out.print(stack.pop());

}

System.out.println(hangshu);

n--;

}

}

}

运行结果:

输入一个整数n(n<100)

2

R12C4

R5C255

D12

IU5

方法二:

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Demo03 {

// 计算出字母的个数

public static int checkCount(int n){

int count = 1;

while(true){

int t = (int)Math.pow(26, count);

if(n > t){

count++;

n -= t;

}else{

return count;

}

}

}

// 添加余数对应的字母

public static char f(int n){

if(n==26){

return 'Z';

}else{

return (char)('A'-1+n%26);

}

}

// 计算结果

public static String fun(int Row,int Col){

StringBuffer sb = new StringBuffer();

int count = checkCount(Col); // 计算出字母的个数

while(count>0){

if(Col%26==0){ //如果能除尽

// 例(702):702/26时(2余0) 应该分配成(1,26)

// 个位加26('Z')时就等于十位上的2 去掉(1个26),(一个(个位的26)对应一个(十位的1))

// 修改n的值2-1; n就等于1; 这时就分配成了(1,26);

sb.insert(0,'Z'); // 添加'Z'

Col = Col/26 -1;

}else{

sb.insert(0,f(Col));// 添加余数r对应的字母

Col /= 26; // 修改n 的值

}

count--;

}

sb.append(Row); // RC地址后添加(行号)

return sb.toString();

}

// 输入数据

public static void input(String[] s){

Scanner scan = new Scanner(System.in);

int i = 0;

while(i

s[i++] = scan.nextLine();

}

}

// 拆分并计算结果

public static void splitOper(String[] s){

Pattern p = https://www.360docs.net/doc/b716067168.html,pile("[0-9]+"); // 以数字做分隔

for(int i=0;i

Matcher m = p.matcher(s[i]); // 得到所有数字

m.find(); // 得到第一个数字

int Row = Integer.parseInt(m.group()); // 取出第一个数字

m.find(); // 得到第二个数字

int Col = Integer.parseInt(m.group()); // 取出第二个数字

System.out.println(fun(Row,Col)); // 计算结果并输出

}

}

// 主函数

public static void main(String[] args){

Scanner scan = new Scanner(System.in);

System.out.println("输入一个整数n(n<100)");

String[] s = new String[scan.nextInt()];

input(s); // 输入数据

splitOper(s); // 拆分并计算结果

}

}

运行结果:

输入一个整数n(n<100)

2

R12C4

R5C255

D12

IU5

5.手机尾号评分

30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!给手机选个好听又好记的号码可能是许多人的心愿。

但号源有限,只能辅以有偿选号的方法了。

这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:

1. 如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。

2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。

注意:7777因为满足这条标准两次,所以这条规则给它加了6分。

3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。

注意:7777因为满足这条标准两次,所以这条标准给它加了2分。

4. 含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。

尾号最终得分就是每条标准的加分总和!

要求程序从标准输入接收数据,在标准输出上输出结果。

输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行4位一组的数据,就是等待计算加分的手机尾号。

例如,输入:

14

3045

….

…..

6789

8866

则输出:

….

8

5

*/

package Question1_9;

import java.util.Scanner;

import java.util.Stack;

import java.util.Vector;

public class Question5 {

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt();

scanner.nextLine();

while ((n--)>0) {

String telphone=scanner.nextLine();

int sum=0;

/*

* 情况一

*/

if(telphone.charAt(0)-telphone.charAt(1)==1){

char ch=telphone.charAt(0);

int index=0;

while (index<4&&ch==telphone.charAt(index)) {

ch--;

index++;

}

if(index>=4){

sum+=5;

}

}

if (telphone.charAt(0)-telphone.charAt(1)==-1) {

char ch=telphone.charAt(0);

int index=0;

while (index<4&&ch==telphone.charAt(index)) {

ch++;

index++;

}

if(index>=4){

sum+=5;

}

}

/*

* 情况二

*/

if

(telphone.charAt(0)==telphone.charAt(1)&&telphone.charAt(1)==telphone.charAt(2)) { sum+=3;

}

if(telphone.charAt(1)==telphone.charAt(2)&&telphone.charAt(2)==telphone.charAt(3)){ sum+=3;

}

/*

* 情况三

*/

if(telphone.charAt(0)==telphone.charAt(1)&&telphone.charAt(2)==telphone.charAt(3)){ sum+=1;

}

if(telphone.charAt(0)==telphone.charAt(2)&&telphone.charAt(1)==telphone.charAt(3)){ sum+=1;

}

/*

* 情况四

*/

for (int i = 0; i < 4; i++) {

if(telphone.charAt(i)=='6'||telphone.charAt(i)=='8'||telphone.charAt(i)=='9'){

sum+=1;

}

}

System.out.println(sum);

}

}

}

运行结果:

14

3045

0211

…..

…..

……

8

5

方法二:

import java.util.Scanner;

public class Demo07 {

// 输入数据

public static void input(String[] n){

Scanner scan = new Scanner(System.in);

int i = 0;

while(i

n[i++] = scan.nextLine();

}

}

// 得到分数

public static int getGrade(String n){

int s = 0; // 总分

char[] x = n.toCharArray();

int a = x[0]-'0';

int b = x[1]-'0';

int c = x[2]-'0';

int d = x[3]-'0';

if(a+1==b&&b+1==c&&c+1==d||a-1==b&&b-1==c&&c-1==d){ s += 5; // 1.出现连号+5分

}

if(a==b&&b==c){

s += 3; // 2.三个数字相同(前三)+3分

}

if(b==c&&c==d){

s += 3; // 2.三个数字相同(后三)+3分

}

if(a==b&&c==d){

s += 1; // 3.AABB模式+1分

}

if(a==c&&b==d){

s += 1; // 3.ABAB模式+1分

}

if(a==6||a==8||a==9){

s += 1; // 4.a含有:6 或8 或9 +1分

}

if(b==6||b==8||b==9){

s += 1; // 4.b含有:6 或8 或9 +1分

}

if(c==6||c==8||c==9){

s += 1; // 4.c含有:6 或8 或9 +1分

}

if(d==6||d==8||d==9){

s += 1; // 4.d含有:6 或8 或9 +1分

}

return s;

}

// 取得每一行分数并输出

public static void fun(String[] n){

for(String x:n){

System.out.println(getGrade(x));

}

}

public static void main(String[] args){

Scanner scan = new Scanner(System.in);

String[] n = new String[scan.nextInt()];

input(n); // 输入数据

fun(n);

}

}

运行结果:

14

3045

0211

2345

6543

7777

8888

7878

7788

6688

2424

2244

9918

6789

8866

5

6

8

12

3

3

5

1

1

3

8

5

6.括号问题

下面的代码用于判断一个串中的括号是否匹配所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉

例如:

..(..[..]..).. 是允许的

..(...[...)....].... 是禁止的

对于main 方法中的测试用例,应该输出:

false

true

false

false

请分析代码逻辑,并推测划线处的代码。

答案写在“解答.txt”文件中

注意:只写划线处应该填的内容,划线前后的内容不要抄写。

import java.util.*;

publicclass Demo06 {

publicstaticboolean isGoodBracket(String s) {

Stack a = new Stack();

for (int i = 0; i < s.length(); i++) {

char c = s.charAt(i);

if (c == '(')

a.push(')');

if (c == '[')

a.push(']');

if (c == '{')

a.push('}');

if (c == ')' || c == ']' || c == '}') {

if (a.size()==0)

returnfalse; // 填空

if (a.pop() != c)

returnfalse;

}

}

if (a.size()!=0)

returnfalse; // 填空

returntrue;

}

publicstaticvoid main(String[] args) {

System.out.println(isGoodBracket("...(..[.)..].{.(..).}..."));

System.out.println(isGoodBracket("...(..[...].(.).).{.(..).}..."));

System.out.println(isGoodBracket(".....[...].(.).){.(..).}..."));

System.out.println(isGoodBracket("...(..[...].(.).){.(..)...."));

}

}

运行结果:

false

true

false

false

7.扑克牌排列

下面代码模拟了一套扑克牌(初始排序A~K,共13张)的操作过程。

操作过程是:

手里拿着这套扑克牌,从前面拿一张放在后面,再从前面拿一张放桌子上,再从前面拿一张放在后面,.... 如此循环操作,直到剩下最后一张牌也放在桌子上。

下面代码的目的就是为了求出最后桌上的牌的顺序。

初始的排列如果是A,2,3...K,则最后桌上的顺序为:

[2, 4, 6, 8, 10, Q, A, 5, 9, K, 7, 3, J]

请分析代码逻辑,并推测划线处的代码。

答案写在“解答.txt”文件中

注意:只写划线处应该填的内容,划线前后的内容不要抄写。

package Question1_9;

import java.util.Arrays;

import java.util.List;

import java.util.Vector;

public class Question7 {

public static List moveCard(List src) {

if (src == null)

return null;

List dst = new Vector();

for (;;) {

if (src.size()==0)

break; // 填空

src.add(src.remove(0));

dst.add(src.remove(0)); // 填空

}

return dst;

}

public static void main(String[] args) {

List a = new Vector();

a.addAll(Arrays.asList("A", "2", "3", "4", "5", "6", "7", "8", "9",

"10", "J", "Q", "K"));

System.out.println(moveCard(a));

}

}

运行结果:

[2, 4, 6, 8, 10, Q, A, 5, 9, K, 7, 3, J]

方法二:

import java.util.ArrayList;

public class Squeezer {

public static void main(String args[]){

ArrayList list=new ArrayList();

list.add("K");

list.add("Q");

list.add("J");

list.add("10");

蓝桥杯_C-校内选拔题

第六届“蓝桥杯”校内选拔考试(C/C++)1、Problem A: 求和(20分) Description 输入一个十进制数,计算它转化成四进制数后各个位数的和。Input 输入有多个实例,输入一个十进制数n。(0

2、Problem B: 多少种方法(20分) Description 听说大一的小伙伴们刷题特别crazy,LM大魔王也有点按耐不住了,也开始刷题啊。于是他找了下面一道题开始做,但这道题好难啊,听说LM大魔王用了好久好久好久好久好久。。。的时间才做出来。题目如下:一些正整数都可以被连续的一个或多个素数之和表示。例如,整数53有两种表示5 + 7 + 11 + 13 + 17和53。41有三种表示2 + 3 + 5 + 7 + 11 + 13、11 + 13 + 17和41。3只有一种表示3。整数20没有这样表示。注意,被加数必须为连续的素数,所以整数20不可以表示为7+13也不可表示为3+5+5+7。你的任务是编写一个程序,计算出给定的正整数能有多少连续素数之和表示方法。 Crazy and clever的小伙伴们你们能用多长时间A掉呢? Input 有多组输入。每行输入一个正整数N(2<=N<=10000). Output 对应每组输入的数据N,输出有多少种连续素数之和表示N的方法。

Sample Input 2 3 17 41 20 666 12 53 Sample Output 1 1 2 3 1 2

蓝桥杯c c 省赛试题及答案解析

2016蓝桥杯c-c++B组省赛试题及解析 第一题 煤球数目 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

答案:171700 #include<> int main() { int a[101] ={0}; for(int i = 1 ; i < 101 ; i ++) a[i] = a[i-1] + i; int ans = 0; for(int j = 1 ; j < 101 ; j ++) ans += a[j]; printf("%d\n",ans); return 0; }

第二题 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 答案:26 #include<> int main()

{ int start,end; for(start = 1 ; start < 236 ; start ++) { for( end = start ; end < 236 ; end ++ ) { int sum = 0; for(int i = start; i <= end; i ++) sum += i; if( sum == 236) { printf("start : %d end : %d\n",start,end); } } }

蓝桥杯java练习题分类汇总

蓝桥杯java练习题分类汇总 (一)字符串处理类型题目 1.密码破解 据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。 密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M 原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U (注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。) 输入:最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成: 1.起始行:START 2.密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息. 3.结束行:END 在最后一个数据集之后,是另一行:ENDOFINPUT。 输出: 每个数据集对应一行,是凯撒的原始消息。 ?Sample Input START NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END START N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ END START IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END ENDOFINPUT ?Sample Output IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE 2. 判断是否为回文串 形如:“abccba”,“abcba”的串称为回文串(指顺读和倒读都一样的词

2014蓝桥杯湖师校内选拔赛试题及参考代码

2014蓝桥杯湖师校内选拔赛试题及参考代码 1.神秘的数 是这样的一个整数,组成这个数的各位数字阶乘之和正好等于它本身。 例如:对于一个三位数abc,如果abc=a!+b!+c!, 则该数是神秘的数。 对于一个四位数abcd,如果abcd=a!+b!+c!+d!, 则该数是神秘的数。 要求输出范围在100~50000之间的所有的神秘的数。每个数输出一行,每行从第1列输出,不要输出空行。 结果: 145 40585 参考代码: #include int main() { int i,j,a,b,t,s; for(i=100;i<=50000;i++) { s=0; a=i; while(a!=0) { t=1; b=a%10; for(j=1;j<=b;j++) t=t*j; s=s+t; a=a/10; } if(s==i) printf("%d\n",i); } return 0; } 2 轮转数(每个字符依次向右循环移动) 有一字符串(小写a-z): abcdefghijklmnopqrstuvwxyz 经过1次向右循环移动,得到字符串zabcdefghijklmnopqrstuvwxy 经过2次向右循环移动,得到字符串yzabcdefghijklmnopqrstuvwx 经过3次向右循环移动,得到字符串xyzabcdefghijklmnopqrstuvw 编写程序,输入向右移动次数n(n为int类型), 输出向右移动n次数后得到的字符串。 样例输入 4 样例输出 wxyzabcdefghijklmnopqrstuv 样例输入

8 样例输出 stuvwxyzabcdefghijklmnopqr 测试数据: 输入6 输出uvwxyzabcdefghijklmnopqrst 输入523 输出xyzabcdefghijklmnopqrstuvw 参考代码 #include int main() { int i,n,j=0; scanf("%d",&n); for(i=26-n%26;j<26;i=(i+1)%26,++j) printf("%c",'a'+i); return 0; } 3.将十进制数转换成十六进制数 输入要求: 包括多组测试数据。输入一个不超过10位正整数,无前导零。输入以0结束。输出要求: 输出其十六进制表示(不打印前导零,A~F字母大写)。 输入样例: 12 20 123456789 0 输出样例: C 14 75BCD15 提示:输入以0结束,不要打印多余字符! 测试数据 输入 234 1234 9123456780 0 输出 EA 4D2 21FCCE70C 参考代码: #include int main() { int i,j,dnum,t; char xnum[100]; while(1) { scanf("%d",&dnum);

蓝桥杯2016年JavaB组省赛题

2016年JavaB组省赛题 1.煤球数目 (结果填空) 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 2.生日蜡烛 (结果填空) 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 3.凑算式 (结果填空) B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见【图1.jpg】) 这个算式中A~I代表0~9的数字,不同的字母代表不同的数字。 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法? 注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。 5.抽签 (代码填空) X星球要派出一个5人组成的观察团前往W星。 其中: A国最多可以派出4人。 B国最多可以派出2人。 C国最多可以派出2人。 .... 那么最终派往W星的观察团会有多少种国别的不同组合呢? 下面的程序解决了这个问题。 数组a[] 中既是每个国家可以派出的最多的名额。 程序执行结果为: DEFFF CEFFF CDFFF CDEFF CCFFF CCEFF CCDFF CCDEF BEFFF BDFFF BDEFF BCFFF BCEFF BCDFF BCDEF

2015年蓝桥杯A组试题及答案

2015蓝桥杯A组试题 方程整数解 方程: a^2 + b^2 + c^2 = 1000 (或参见【图1.jpg】) 这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。 你能算出另一组合适的解吗? 请填写该解中最小的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 #include"stdio.h" #include"windows.h" int main() { int a, b, c; for (a = 1; a < 31;a++) for (b= 1; b < 31; b++) for (c = 1; c < 31; c++) { if (a*a + b*b + c*c == 1000) printf("%d %d %d\n", a, b, c); } printf("%d %d %d",a,b,c); system("pause"); return 0; } 星系炸弹 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。 请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19

请严格按照格式书写。不能出现其它文字或符号。 21+31(2014年)+365(2015年)+366(2016年)=783;1000-783=217(2017年的第217天爆炸);31+28+31+30+31+30+31=212(2017年前七个月的天数);217-212=5(2017年第8个月的第五天爆炸) 大牛有用excel直接拖,用vbs算,路漫漫其修远兮...... 奇妙的数字 小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗? 请填写该数字,不要填写任何多余的内容。 69,一个个试吧。 格子中输出 StringInGrid函数会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两个方向上都居中。 如果字符串太长,就截断。 如果不能恰好居中,可以稍稍偏左或者偏上一点。 下面的程序实现这个逻辑,请填写划线部分缺少的代码。 #include #include void StringInGrid(int width, int height, const char* s) { int i,k; char buf[1000]; strcpy(buf, s); if(strlen(s)>width-2) buf[width-2]=0; printf("+"); for(i=0;i

2014年第五届蓝桥杯预赛题目及标准答案

第十题 标题:小朋友排队 n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。 如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。 请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。 如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。 【数据格式】 输入的第一行包含一个整数n,表示小朋友的个数。 第二行包含n 个整数H1 H2 …Hn,分别表示每个小朋友的身高。 输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。 例如,输入: 3 3 2 1 程序应该输出: 9 【样例说明】 首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。 【数据规模与约定】 对于10%的数据,1<=n<=10; 对于30%的数据,1<=n<=1000; 对于50%的数据,1<=n<=10000; 对于100%的数据,1<=n<=100000,0<=Hi<=1000000。 资源约定: 峰值内存消耗< 256M CPU消耗< 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意: main函数需要返回0 注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。注意: 所有依赖的函数必须明确地在源文件中#include ,不能通过工程设置而省略常用头文件。 提交时,注意选择所期望的编译器类型。 10 #include #include #include #include using namespace std; struct People { int top; int step; }; struct Cmp { bool operator()(const People &m, const People &n)const {

2014第五届蓝桥杯JAVA本科B组试题及答案

2014第五届蓝桥杯JAVA本科B组试题及答案 1. 武功秘籍小明到X山洞探险 2000 10页和第1111页和第12页不在同一张纸上。 小明只想练习该书的第81页到第92 撕 80,81 82,8384,8586,87888990,9192,93 2. 切面条2根面条。 如果先对折13根面条。 如果连续对折25根面条。 10 1025 import java.util.Scanner; public class Main { public static void main(String []args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int num = (int)Math.pow(2, n) + 1; System.out.println(num); //结果:2015 } } 3. 猜字母把abcd...s共19个字母组成的序列重复拼接1062014的串。

接下来删除第1a35个等所有奇数位置的 字母。 写 出该字母。 q import java.util.Scanner; /** * 该程序类似与约瑟夫环的问题 */ public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = "abcdefghijklmnopqrs"; String str1 = ""; for(int i = 0;i < 106;i++){ str1 = str1 + str;

蓝桥杯练习系统题目汇总

蓝桥杯练习系统题目汇总: 入门训练 1. Fibonacci数列 问题描述 Fibonacci数列的递推公式为:F n=F n-1+F n-2,其中F1=F2=1。 当n比较大时,F n也非常大,现在我们想知道,F n除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示F n除以10007的余数。 说明:在本题中,答案是要求F n除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出F n的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。 样例输入 10 样例输出 55 样例输入 22 样例输出 7704 数据规模与约定 1 <= n <= 1,000,000。 参考代码:c++ 1.#include 2.#include 3.#define MOD 10007 4.#define MAXN 1000001 5.int n, i, F[MAXN]; 6.int main() 7.{ 8.scanf("%d", &n); 9.F[1] = 1; 10.F[2] = 1; 11.for(i = 3; i <= n; ++i) 12.F[i] = (F[i-1] + F[i-2]) % MOD; 13.printf("%d\n", F[n]); 14.return0; 15.}

java: 1.import java.util.Scanner; 2.public class Main{ 3.public static void main(String[] args) { 4.Scanner scanner = new Scanner(System.in) ; 5.int num = scanner.nextInt() ; 6.int[] a = new int[num+2] ; 7.a[1] = a[2] = 1; 8.if(num == 1) { 9.a[num] = 1 ; 10.}else if(num == 2) { 11.a[num] = 1 ; 12.}else{ 13.for(int i = 3; i <= num; i++) { 14.a[i] = (a[i - 1] + a[i - 2] ) % 10007 ; 15.} 16.} 17.System.out.println(a[num]); 18.} 19.} 2. 实数输出 问题描述 给定圆的半径r,求圆的面积。 输入格式 输入包含一个整数r,表示圆的半径。 输出格式 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。 说明:在本题中,输入是一个整数,但是输出是一个实数。 对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。 实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。 样例输入 4 样例输出 50.2654825 数据规模与约定

2014年第五届蓝桥杯预赛题目JAVA软件开发高职高专组

2014年预赛Java高职高专组 考生须知: ●考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压。 ●考试时间为4小时。时间截止后,选手无法继续提交答案。 ●在考试强制结束前,选手可以主动结束考试(需要身份验证),结束考试后将无法继续提交或浏览答案。 ●选手可浏览自己已经提交的答案。被浏览的答案允许拷贝。 ●对同一题目,选手可多次提交答案,以最后一次提交的答案为准。 ●参赛选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等与身份有关的信息或其它与竞赛题目无关的内容,否则成绩无效。 ●参赛选手必须通过浏览器方式提交自己的答案。选手在其它位置的作答或其它方式提交的答案无效。 ●试题包含三种类型:“结果填空”、“代码填空”与“程序设计”。 结果填空题:要求参赛选手根据题目描述直接填写结果。求解方式不限。不要求源代码。把结果填空的答案直接通过网页提交即可,不要书写多余的内容,比如:注释说明。 代码填空题:要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不超过一条语句(即中间不能出现分号)。 把代码填空的答案(仅填空处的答案,不包括题面已存在的代码)直接通过网页提交即可,不要书写多余的内容,比如:注释或说明文字。 程序设计题目:要求选手设计的程序对于给定的输入能给出正确的输出结果。考生的程序只有能运行出正确结果,才有机会得分。 注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。 所有源码必须在同一文件中。调试通过后,拷贝提交。 注意:不要使用package语句。源程序中只能出现JDK1.6中允许的语法或调用。不能使用1.7或更高版本的特性。 注意:选手代码的主类名必须为:Main,否则会被判为无效代码。 1.结果填空(满分2分) 问题的描述在考生文件夹下对应题号的“题目.txt”中。相关的参考文件在同一目录中。请仔细阅读题目,不限解决问题的方式,只要求提交结果。 必须通过浏览器提交答案。 只提交题目要求的内容,不要填写任何多余的文字!! 2.结果填空(满分4分) 问题的描述在考生文件夹下对应题号的“题目.txt”中。相关的参考文件在同一目录中。请先阅读题目,不限解决问题的方式,只要求提交结果。 必须通过浏览器提交答案。

蓝桥杯Java试题汇总-共48页

1. 历届试题核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃(当然是不能打碎的) 3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30) 输出格式 输出一个正整数,表示每袋核桃的数量。 样例输入1 2 4 5 样例输出1 20

样例输入2 3 1 1 样例输出2 3 JAVA 源代码 1import java.util.Scanner; 2public class Main { 3 4public static void main(String[] args){ 5 Scanner sc=new Scanner(System.in); 6int a=sc.nextInt(); 7int b=sc.nextInt(); 8int c=sc.nextInt(); 9int i; 10for(i=1;;i++){ 11if(i%a==0&&i%b==0&&i%c==0) 12 13break; 14 } 15 System.out.println(i); 16 }} 2.基础练习Sine之舞 时间限制:1.0s 内存限制:512.0MB 问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学

好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。 不妨设 An=sin(1–sin(2+sin(3–sin(4+...sin(n))...) Sn=(...(A1+n)A2+n-1)A3+...+2)An+1 FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。 输入格式 仅有一个数:N<201。 输出格式 请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。 样例输入 3 样例输出 ((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin( 3)))+1 语言JAVA 源代码17import java.util.Scanner; 18public class Main { 19private static int m; 20public static void main(String[] args){ 21 Scanner sc=new Scanner(System.in); 22 m=sc.nextInt(); 23for(int i=0;i

2018蓝桥杯试题

2018蓝桥杯C语言b组国赛真题 1.标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种。 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱。 小明有点强迫症,他坚持要求200元换出的零钞中2元的张数刚好是1元的张数的10倍, 剩下的当然都是5元面额的。 银行的工作人员有点为难,你能帮助算出:在满足小明要求的前提下,最少要换给他多少张钞票吗? (5元,2元,1元面额的必须都有,不能是0) 注意,需要提交的是一个整数,不要填写任何多余的内容。 手算都可以。。。下面是代码,答案74 1.#include https://www.360docs.net/doc/b716067168.html,ing namespace std; 3.int main(){ 4.for(int i=1;i<40;i++){ 5.for(int j=1;j<200;j++){ 6.if(5*i+2*10*j+1*j==200) 7. cout<<"5*"<

12.2.标题:激光样式 x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。 安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开! 国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果? 显然,如果只有3台机器,一共可以成5种样式,即: 全都关上(sorry, 此时无声胜有声,这也算一种) 开一台,共3种 开两台,只1种 30台就不好算了,国王只好请你帮忙了。 要求提交一个整数,表示30台激光器能形成的样式种数。 注意,只提交一个整数,不要填写任何多余的内容。 思路很简单,暴力搜索,30个灯光从左到右,从左边第一个开始,第一个可以开关,第二个要根据左边的灯光是否开启来取值,以此类推。。。答案2178309 1.#include 2.#include https://www.360docs.net/doc/b716067168.html,ing namespace std; 4.int ans = 0; 5.int x[31];//0代表关,1代表开 6. 7.void dfs(int index){ 8.if(index == 30){ 9.ans++; 10.return; 11.} 12.if(index == 0 || x[index-1] == 0){ //第一个灯光可以取0或1,当前灯 光左边要是没开,那当前灯光可以取0和1 13.for(int i=0;i<=1;i++){ 14.x[index] = i;

第五届蓝桥杯计算比赛省赛真题

标题:武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。 小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走? 这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。 标题:等额本金 小明从银行贷款3万元。约定分24个月,以等额本金方式还款。 这种还款方式就是把贷款额度等分到24个月。每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息。 假设月利率是:0.005,即:千分之五。那么, 第一个月,小明要还本金1250, 还要还利息:30000 * 0.005,总计1400.00 第二个月,本金仍然要还1250, 但利息为:(30000-1250) * 0.005 总计1393.75 请问:小明在第15个月,应该还款多少(本金和利息的总和)? 请把答案金额四舍五入后,保留两位小数。注意:32.5,一定要写为:32.50 通过浏览器提交答案,这是一个含有小数点和两位小数的浮点数字。不要写多余内容(例如:多写了“元”或添加说明文字) 标题:猜字母 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。 得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。 答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。 标题:大衍数列 中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。 它的前几项是:0、2、4、8、12、18、24、32、40、50 ... 其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。 以下的代码打印出了大衍数列的前100 项。 int main() { int i; for(i=1; i<100; i++){ if(__________________) //填空 printf("%d ", i*i/2); else printf("%d ", (i*i-1)/2); }

第十一届蓝桥杯校内赛校内选拔赛(2020蓝桥杯校选1-javac.)

第十一届蓝桥杯校内赛/校内选拔赛(2020蓝桥杯校选1-java/c) 一、问题描述 请问十六进制数1949对应的十进制数是多少?请特别注意给定的是十六进制,求的是十进制。 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分. 二、问题描述 两个二进制数11110011101和1111101001的和是多少?请用二进制表示,注意在提交的时候不要提交前导0。 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个二进制数,在提交答案时只填写这个二进制数,填写多余的内容将无法得分。 三、问题描述 将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。 请问,总共能排列如多少个不同的单词。 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 四、问题描述 在2019个有区别的球中选3个球放在一个盘子里,请问有多少种选法? 答案提交: 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 五、问题描述 小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。 给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。 元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。 输入格式: 输入一行,包含一个单词,单词中只包含小写英文字母。

2017年蓝桥杯省赛赛前集训题(共14题)

第1题:星系炸弹(2015年省赛C/C++B组第2题)在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。 请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19 请严格按照格式书写。不能出现其它文字或符号。 ?结果:2017-08-05 ?解决方法:用Excel拖 这个题会了的同学们把上课讲过的,课件上的,其他几道Excel拖动题都做一遍。 第2题:(2015年校内选拔赛C/C++B组第3题)如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字。 请把x的值计算到小数后6位(四舍五入),并填写这个小数值。 注意:只填写一个小数,不要写任何多余的符号或说明。 #include #include

#include using namespace std; int main() { double x; for(x=2;x<=3;x+=1e-7) { if (abs(pow(x,x)-10)<1e-6) cout<

2017年蓝桥杯省赛赛前集训题(共14题)

2017年蓝桥杯省赛赛前集训题(共14题)

第1题:星系炸弹(2015年省赛C/C++B组第2题)在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。 请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19 请严格按照格式书写。不能出现其它文字或符号。 ?结果:2017-08-05 ?解决方法:用Excel拖 这个题会了的同学们把上课讲过的,课件上的,其他几道Excel拖动题都做一遍。 第2题:(2015年校内选拔赛C/C++B组第3题)如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字。 请把x的值计算到小数后6位(四舍五入),并填写这个小数值。 注意:只填写一个小数,不要写任何多余的符号或说明。

答案:14 解法1:next_permutation的解法 #include #include using namespace std; int main() { int p[15]={1,1,1,1,1,2,2,2,2,2,2,2,2,2,2};//1是店,2是花 int sum,cnt=0; do { sum=2; for(int i=0;i<15;i++) if(p[i]==1) sum<<=1; else if(p[i]==2) sum--; if(sum==0) cnt++; } while(next_permutation(p,p+14));//因为最后一次遇到的肯定是花,所以只排前14个数,不排最后一个 cout< using namespace std; #define N 14//因为最后一次肯定是花,所以只排14个数 int cnt; bool ok(int p[],int begin,int end) { for (int i = begin; i < end; i++) if (p[i] == p[end]) return false; return true; } void perms(int p[],int start) { int i; if(start==N-1)

2014第五届蓝桥杯JAVA本科B组试题答案

2014第五届蓝桥杯JAVA本科B组试题及答案? 1. 武功秘籍 答案:(80,81);(82,83);(84,85);(86,87);(88,89);(90,91);(92,93)? 2. 切面条 答案:1025 import java.util.Scanner; public class Main { public static void main(String []args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int num = (int)Math.pow(2, n) + 1; System.out.println(num); //结果:2015 } } ? 3. 猜字母

答案:q import java.util.Scanner; /** * 该程序类似与约瑟夫环的问题 */ public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = "abcdefghijklmnopqrs"; String str1 = ""; for(int i = 0;i < 106;i++){ str1 = str1 + str; } System.out.println(str1.length()); boolean[] arr = new boolean[str1.length()]; for(int i=0; i 1) { if(arr[index] == true) { //当在圈里时 if(countNum%2 == 0) { //下标为偶数时 arr[index] = false; //该字母退出圈子 leftCount --; //剩余字母数目减一 } countNum++; } index ++; //每报一次数,下标加一

第四届蓝桥杯真题及答案

1. 结果填空(满分4分) 题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费 呢? 高斯出生于:1777年4月30日。 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。 高斯获得博士学位的那天日记上标着:8113 请你算出高斯获得博士学位的年月日。 提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21 请严格按照格式,通过浏览器提交答案。 注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。 考场快速解题: 先看1778是闰年么?答案是不是,所以8113 - 365= 7748,又1779也不是,所以再减365得7383,然后1780是的,所以减去366得7017,又 1781,1782,1783,肯定都不是所以连减3个365得5922,然后又是闰年,-366,再-365 - 365-365 -366 - 365 -365 -365 -366 -365 -365 -365 ~ -366 -365-365 -365 1799 得 78,即这一天是1799年4月30日之后的78天,5月31天,-31,6月30天,-30,剩17天,此时即加上两个月,为1799年6月30日,然后往后数17天,即为1799年7月16日。 答案即为:1799-07-16 2. 结果填空(满分5分)

2011蓝桥杯决赛题附答案

2011年暑假蓝桥杯决赛题附答案 1.四方定理 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。 我们可以通过计算机验证其在有限范围的正确性。 对于大数,简单的循环嵌套是不适宜的。下面的代码给出了一种分解方案。 请仔细阅读,填写空缺的代码(下划线部分)。 注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。 直接写在题面中不能得分。 int f(int n, int a[], int idx) { if(______________) return 1; // 填空1 if(idx==4) return 0; for(int i=(int)sqrt(n); i>=1; i--) { a[idx] = i; if(_______________________) return 1; // 填空2 } return 0; } int main(int argc, char* argv[]) { for(;;) { int number; printf("输入整数(1~10亿):"); scanf("%d",&number); int a[] = {0,0,0,0}; int r = f(number, a, 0); printf("%d: %d %d %d %d\n", r, a[0], a[1], a[2], a[3]);

} return 0; } 2.加密 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。 解密的方法就是再执行一次同样的操作。 加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。 下面的代码演示了如何实现该功能。 请仔细阅读,填写空缺的代码(下划线部分)。 注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。 直接写在题面中不能得分。 void f(char* buf, unsigned char* uckey, int n) { int i; for(i=0; i

相关文档
最新文档