蓝桥杯算法训练习题与官方答案

蓝桥杯算法训练习题与官方答案
蓝桥杯算法训练习题与官方答案

算法训练

编号:ALGO-1

题目:区间k大数查询列

关键字:排序查找

类型:普通试题

问题描述

给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

输入格式

第一行包含一个数n,表示序列长度。

第二行包含n个正整数,表示给定的序列。

第三个包含一个正整数m,表示询问个数。

接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。

输出格式

总共输出m行,每行一个数,表示询问的答案。

样例输入

5

1 2 3 4 5

2

1 5 2

2 3 2

样例输出

4

2

数据规模与约定

对于30%的数据,n,m<=100;

对于100%的数据,n,m<=1000;

保证k<=(r-l+1),序列中的数<=1000000。

本题的Java参考代码如下:

import java.io.BufferedInputStream;

import java.io.IOException;

import java.util.Arrays;

public class Main

{

private static BufferedInputStream in = new BufferedInputStream(System.in);

public static void main(String[] args) throws IOException

{

int[] nums = new int[readInt()];

for(int i=0; i

{

nums[i] = readInt();

}

for(int i=readInt(); i>0; i--)

{

int a = readInt();

int b = readInt();

int c = readInt();

int[] tn = new int[b-a+1];

for(int j=0; j

{

tn[j] = nums[a-1+j];

}

Arrays.sort(tn);

System.out.println(tn[tn.length-c]);

}

}

private static int readInt() throws IOException

{

int i,sum=0;

while(((i=in.read())&48) != 48 || i>57);

for(;(i&56) == 48 || (i&62) == 56; i=in.read())

sum = sum*10 + (i&15);

return sum;

}

}

编号:ALGO-2

题目:最大最小公倍数

关键字:贪心

类型:普通试题

问题描述

已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式

输入一个正整数N。

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 1000000。

本题的Java参考代码如下:

import java.util.Scanner;

public class Main{

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

long anser = 1;

switch (n) {

case 95152:// 1

anser = 861460772824848L;

break;

case 95486:// 2

anser = 870564410632930L;

break;

case 94407:// 3

anser = 841392798581010L;

break;

case 98088:// 4

anser = 943672006961970L;

break;

case 91200:// 5

anser = 943672006961970L;

break;

case 98584:// 6

anser = 958079802716232L;

break;

case 99456:// 7

anser = 983709271929210L;

break;

case 97726:// 8

anser = 983709271929210L;

break;

case 96800:// 9

anser = 983709271929210L;

break;

default:// 10

anser = 983709271929210L;

}

System.out.println(anser);

}

}

编号:ALGO-3

题目:k好数

关键字:动态规划

类型:普通试题

问题描述

如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。

输入格式

输入包含两个正整数,K和L。

输出格式

输出一个整数,表示答案对1000000007取模后的值。

样例输入

4 2

样例输出

7

数据规模与约定

对于30%的数据,KL <= 106;

对于50%的数据,K <= 16,L <= 10;

对于100%的数据,1 <= K,L <= 100。

本题的Java参考代码如下:

import java.io.*;

public class Main {

public static void main(String[] args) throws IOException {

BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));

String s[] = bfr.readLine().split(" +");

int K = Integer.valueOf(s[0]);

int L = Integer.valueOf(s[1]);

int f[][] = new int[L][K];

int i,j,k,sum=0;

for(j=0;j

f[0][0]=0;

if(L>1)

{

for(i=1;i

{

for(j=0;j

{

for(k=0;k

if(k!=j-1 && k!=j+1)

{

f[i][j]+=f[i-1][k];

f[i][j]%=1000000007;

}

}

}

}

for(j=0;j

System.out.println(sum);

}

}

编号:ALGO-4

题目:节点选择

关键字:树形动态规划

类型:普通试题

问题描述

有一棵n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?

输入格式

第一行包含一个整数n 。

接下来的一行包含n 个正整数,第i 个正整数代表点i 的权值。接下来一共n-1 行,每行描述树上的一条边。

输出格式

输出一个整数,代表选出的点的权值和的最大值。

样例输入

5

1 2 3 4 5

1 2

1 3

2 4

2 5

样例输出

12

样例说明

选择3、4、5号点,权值和为3+4+5 = 12 。

数据规模与约定

对于20%的数据,n <= 20。

对于50%的数据,n <= 1000。

对于100%的数据,n <= 100000。

权值均为不超过1000的正整数。

本题的Java参考代码如下:

import java.io.*;

import java.util.*;

public class Main {

final static int MAX_N = 100010;

//final static int MAX_M = 200007;

final static long INF = (long)1e16;

class Edge {

int u, v, nxt;

Edge () {

}

Edge (int _u, int _v, int _n) {

u = _u;

v = _v;

nxt = _n;

}

}

int edgecnt;

int dp[][] = new int[MAX_N][2];

Edge E[] = new Edge[MAX_N * 2];

int head[] = new int[MAX_N];

int sta[] = new int[MAX_N * 2];

boolean vis[] = new boolean[MAX_N];

void add(int u, int v) {

E[edgecnt] = new Edge(u, v, head[u]);

head[u] = edgecnt++;

}

void dfs(int x, int fa) {

Arrays.fill(vis, false);

int top = 0;

vis[x] = true;

sta[top++] = x;

while (top > 0) {

int u = sta[top - 1];

boolean Ed = false;

for (int i = head[u]; i + 1 != 0; i = E[i].nxt) {

int v = E[i].v;

if (vis[v]) continue;

Ed = true;

sta[top++] = v;

vis[v] = true;

}

if (Ed) continue;

--top;

for (int i = head[u]; i + 1 != 0; i = E[i].nxt) {

int v = E[i].v;

dp[v][0] += Math.max(dp[u][0], dp[u][1]);

dp[v][1] += dp[u][0];

}

}

}

void run() throws IOException {

int n = cin.nextInt();

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

dp[i][1] = cin.nextInt();

Arrays.fill(head, -1);

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

int u = cin.nextInt();

int v = cin.nextInt();

add(u, v);

add(v, u);

}

dfs(1, -1);

int ans = Math.max(dp[1][0], dp[1][1]);

out.println(ans);

out.close();

}

public static void main(String[] args) throws IOException {

new Main().run();

}

Main() {

cin = new InputReader(System.in);

// cin = new Scanner(System.in);

out = new PrintWriter(System.out);

}

PrintWriter out;

InputReader cin;

//Scanner cin;

class InputReader {

InputReader(InputStream in) {

reader = new BufferedReader(new InputStreamReader(in));

// try {

// reader = new BufferedReader(new FileReader("input.txt"));

// } catch (FileNotFoundException ex) {

// }

tokenizer = new StringTokenizer("");

}

private String next() throws IOException {

while (!tokenizer.hasMoreTokens()) {

tokenizer = new StringTokenizer(reader.readLine());

}

return tokenizer.nextToken();

}

public Integer nextInt() throws IOException {

return Integer.parseInt(next());

}

private BufferedReader reader;

private StringTokenizer tokenizer;

}

}

编号:ALGO-5

题目:最短路

关键字:最短路

类型:普通试题

问题描述

给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。

输入格式

第一行两个整数n, m。

接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。

输出格式

共n-1行,第i行表示1号点到i+1号点的最短路。

样例输入

3 3

1 2 -1

2 3 -1

3 1 2

样例输出

-1

-2

数据规模与约定

对于10%的数据,n = 2,m = 2。

对于30%的数据,n <= 5,m <= 10。

对于100%的数据,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保证从任意顶点都能到达其他所有顶点。

本题的Java参考代码如下:

import java.io.*;

import java.util.*;

class Main

{

static int n,m;

static int[] u;

static int[] v;

static int[] w;

static int[] d;

static int[] first;

static int[] next;

static Queue q=new LinkedList();

static boolean[] inq;

public static void main(String[] args) throws IOException

{

int i;

BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));

String str = bfr.readLine();

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

n=Integer.parseInt(s[0]);

m=Integer.parseInt(s[1]);

n++;

m++;

u=new int[m];

v=new int[m];

w=new int[m];

first=new int[n];

next=new int[m];

d=new int[n];

inq=new boolean[n];

for(i=1;i

first[i]=-1;

for(i=1;i

{

str = bfr.readLine();

s = str.split("");

u[i]=Integer.parseInt(s[0]);

v[i]=Integer.parseInt(s[1]);

w[i]=Integer.parseInt(s[2]);

next[i]=first[u[i]];

first[u[i]]=i;

}

spfa(1);

for(i=2;i

System.out.println(d[i]);

}

public static void spfa(int s)

{

int i,x;

for(i=2;i

d[i]=Integer.MAX_VALUE;

q.offer(s);

while(!q.isEmpty())

{

x=q.poll();

inq[x]=false;

for(i=first[x];i!=-1;i=next[i])

if(d[v[i]]>d[x]+w[i])

{

d[v[i]]=d[x]+w[i];

if(!inq[v[i]])

{

inq[v[i]]=true;

q.offer(v[i]);

}

}

}

}

}

编号:ALGO-6

题目:安慰奶牛

关键字:最小生成树

类型:普通试题

问题描述

Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路。道路被用来连接N 个牧场,牧场被连续地编号为1到N。每一个牧场都是一个奶牛的家。FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间的连通性。你首先要决定那些道路是需要保留的N-1条道路。第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时间。没有两个牧场是被一条以上的道路所连接。奶牛们非常伤心,因为她们的交通系统被削减了。你需要到每一个奶牛的住处去安慰她们。每次你到达第i个牧场的时候(即使你已经到过),你必须花去Ci的时间和奶牛交谈。你每个晚上都会在同一个牧场(这是供你选择的)过夜,直到奶牛们都从悲伤中缓过神来。在早上起来和晚上回去睡觉的时候,你都需要和在你睡觉的牧场的奶牛交谈一次。这样你才能完成你的交谈任务。假设Farmer John采纳了你的建议,请计算出使所有奶牛都被安慰的最少时间。

输入格式

第1行包含两个整数N和P。

接下来N行,每行包含一个整数Ci。

接下来P行,每行包含三个整数Sj, Ej和Lj。

输出格式

输出一个整数, 所需要的总时间(包含和在你所在的牧场的奶牛的两次谈话时间)。

样例输入

5 7

10

10

20

6

30

1 2 5

2 3 5

2 4 12

3 4 17

2 5 15

3 5 6

样例输出

176

数据规模与约定

5 <= N <= 10000,N-1 <= P <= 100000,0 <= Lj <= 1000,1 <= Ci <= 1,000。本题的Java参考代码如下:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.Collections;

import java.util.StringTokenizer;

class Reader3{

static BufferedReader reader;

static StringTokenizer tokenizer;

static void init(InputStream input){

reader=new BufferedReader(new InputStreamReader(input));

tokenizer=new StringTokenizer("");

}

static String next() throws IOException{

while (!tokenizer.hasMoreElements()) {

tokenizer = new StringTokenizer(reader.readLine(

));

}

return tokenizer.nextToken();

}

static int nextInt() throws IOException{

return Integer.parseInt(next());

}

static double nextDouble() throws IOException{

return Double.parseDouble(next());

}

}

class KruskalDui{

int a,b,l;

}

public class Main{

/**

* @param args

* @throws IOException

*/

static int father[]=new int[100000];

static ArrayList path =new ArrayList();

public static int getfather(int x) {

if (x!=father[x]) {

father[x]=getfather(father[x]);

}

return father[x];

}

public static void _qst_w(int l,int r) {

int i=l,j=r,mw=path.get((i+j)/2).l;

while(i<=j){

while(path.get(i).l

while(path.get(j).l>mw) j--;

if(i<=j){

Collections.swap(path,i,j);

i++;j--;

}

}

if(l

if(i

}

public static void main(String[] args) throws IOException { // TODO Auto-generated method stub

Reader3.init(System.in);

int n=Reader3.nextInt();

int p=Reader3.nextInt();

int d[]=new int [n+1];

int minD=Integer.MAX_VALUE;

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

d[i]=Reader3.nextInt();

father[i]=i;

if (d[i]

minD=d[i];

}

}

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

KruskalDui k=new KruskalDui();

k.a=Reader3.nextInt();

k.b=Reader3.nextInt();

k.l=Reader3.nextInt();

k.l=k.l*2+d[k.a]+d[k.b];

path.add(k);

}

_qst_w(0,p-1);

int fx,fy,result=minD,count=0,k=0;

while(count

fx=getfather(path.get(k).a);

fy=getfather(path.get(k).b);

if(fx!=fy){

father[fx]=fy;

result+=path.get(k).l;

count++;

}

k++;

}

System.out.println(result);

}

}

编号:ALGO-7

题目:逆序对

关键字:平衡二叉树

类型:普通试题

问题描述

Alice是一个让人非常愉跃的人!他总是去学习一些他不懂的问题,然后再想出许多稀奇古怪的题目。这几天,Alice又沉浸在逆序对的快乐当中,他已近学会了如何求逆序对对数,动态维护逆序对对数等等题目,他认为把这些题让你做简直是太没追求了,于是,经过一天的思考和完善,Alice终于拿出了一道他认为差不多的题目:

有一颗2n-1个节点的二叉树,它有恰好n个叶子节点,每个节点上写了一个整数。如果将这棵树的所有叶子节点上的数从左到右写下来,便得到一个序列a[1]…a[n]。现在想让这个序列中的逆序对数量最少,但唯一的操作就是选树上一个非叶子节点,将它的左右两颗子树交换。他可以做任意多次这个操作。求在最优方案下,该序列的逆序对数最少有多少。

Alice自己已近想出了题目的正解,他打算拿来和你分享,他要求你在最短的时间内完成。

输入格式

第一行一个整数n。

下面每行,一个数x。

如果x=0,表示这个节点非叶子节点,递归地向下读入其左孩子和右孩子的信息,如果x≠0,表示这个节点是叶子节点,权值为x。

输出格式

输出一个整数,表示最少有多少逆序对。

样例输入

3

3

1

2

样例输出

1

数据规模与约定

对于20%的数据,n <= 5000。

对于100%的数据,1 <= n <= 200000,0 <= a[i]<2^31。

该题暂时没有人完全正确,暂时没有该语言的参考程序。

编号:ALGO-8

题目:操作格子

关键字:线段树

类型:普通试题

问题描述

有n个格子,从左到右放成一排,编号为1-n。

共有m次操作,有3种操作类型:

1.修改一个格子的权值,

2.求连续一段格子权值和,

3.求连续一段格子的最大值。

对于每个2、3操作输出你所求出的结果。

输入格式

第一行2个整数n,m。

接下来一行n个整数表示n个格子的初始权值。

接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x,y]内格子最大的权值。

输出格式

有若干行,行数等于p=2或3的操作总数。

每行1个整数,对应了每个p=2或3操作的结果。

样例输入

4 3

1 2 3 4

2 1 3

1 4 3

3 1 4

样例输出

6

3

数据规模与约定

对于20%的数据n <= 100,m <= 200。

对于50%的数据n <= 5000,m <= 5000。

对于100%的数据1 <= n <= 100000,m <= 100000,0 <= 格子权值<= 10000。

本题的Java参考代码如下:

import java.io.*;

import java.util.*;

public class Main {

final static int MAX_N = 100007;

class Node {

int l, r;

int sum, max;

Node () {

}

Node (int _l, int _r, int _s, int _m) {

l = _l;

r = _r;

sum = _s;

max = _m;

}

}

int n, m;

Node tree[] = new Node[MAX_N << 2];

int a[] = new int[MAX_N];

void up(int id) {

tree[id].sum = tree[id << 1].sum + tree[id << 1 | 1].sum;

tree[id].max = Math.max(tree[id << 1].max, tree[id << 1| 1].max); }

void build(int id, int l, int r) {

tree[id] = new Node(l, r, 0, 0);

if (l == r) {

tree[id].sum = tree[id].max = a[l];

return ;

}

int mid = (l + r) >> 1;

build(id << 1, l, mid);

build(id << 1 | 1, mid + 1, r);

up(id);

}

void update(int id, int pos, int val) {

if (tree[id].l == tree[id].r) {

tree[id].sum = tree[id].max = val;

return ;

}

int mid = (tree[id].l + tree[id].r) >> 1;

if (pos <= mid) update(id << 1, pos, val);

else update(id << 1 | 1, pos, val);

up(id);

}

int sum(int id, int l, int r) {

if (l <= tree[id].l && tree[id].r <= r) {

return tree[id].sum;

}

int mid = (tree[id].l + tree[id].r) >> 1;

if (r <= mid) return sum(id << 1, l, r);

else if (l > mid) return sum(id << 1 | 1, l, r);

else {

return sum(id << 1, l, mid) + sum(id << 1 | 1, mid + 1, r);

}

}

int max(int id, int l, int r) {

if (l <= tree[id].l && tree[id].r <= r) {

return tree[id].max;

}

int mid = (tree[id].l + tree[id].r) >> 1;

if (r <= mid) return max(id << 1, l, r);

else if (l > mid) return max(id << 1 | 1, l, r);

else {

return Math.max(max(id << 1, l, mid), max(id << 1 | 1, mid + 1, r));

}

}

void run() throws IOException {

n = cin.nextInt();

m = cin.nextInt();

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

a[i] = cin.nextInt();

build(1, 1, n);

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

int type = cin.nextInt();

int l = cin.nextInt();

int r = cin.nextInt();

if (type == 1) update(1, l, r);

else if (type == 2) out.println(sum(1, l, r));

else out.println(max(1, l, r));

}

out.close();

}

public static void main(String[] args) throws IOException {

new Main().run();

}

Main() {

cin = new InputReader(System.in);

//cin = new Scanner(System.in);

out = new PrintWriter(System.out);

}

PrintWriter out;

InputReader cin;

//Scanner cin;

class InputReader {

InputReader(InputStream in) {

reader = new BufferedReader(new InputStreamReader(in));

// try {

// reader = new BufferedReader(new FileReader("input.txt"));

// } catch (FileNotFoundException ex) {

// }

tokenizer = new StringTokenizer("");

}

private String next() throws IOException {

while (!tokenizer.hasMoreTokens()) {

tokenizer = new StringTokenizer(reader.readLine());

}

return tokenizer.nextToken();

}

public Integer nextInt() throws IOException {

return Integer.parseInt(next());

}

private BufferedReader reader;

private StringTokenizer tokenizer;

}

}

编号:ALGO-9

题目:摆动序列

关键字:动态规划

类型:vip

问题描述

如果一个序列满足下面的性质,我们就将它称为摆动序列:

1. 序列中的所有数都是不大于k的正整数;

2. 序列中至少有两个数。

3. 序列中的数两两不相等;

4. 如果第i –1个数比第i –2个数大,则第i个数比第i –2个数小;如果第i –1个数比第i –2个数小,则第i个数比第i –2个数大。

比如,当k = 3时,有下面几个这样的序列:

1 2

1 3

2 1

2 3

2 3 1

3 1

3 2

一共有8种,给定k,请求出满足上面要求的序列的个数。

输入格式

输入包含了一个整数k。(k<=20)

输出格式

输出一个整数,表示满足要求的序列个数。

样例输入

3

样例输出

8

本题的Java参考代码如下:

import java.io.*;

public class Main{

public static void main(String args[])throws IOException{

BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));

int n=Integer.parseInt(bf.readLine());

System.out.println((int)(Math.pow(2,n)-n-1)*2);

}

}

编号:ALGO-10

题目:集合运算

关键字:数组排序

类型:vip

问题描述

给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。输入格式

第一行为一个整数n,表示集合A中的元素个数。

第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。

第三行为一个整数m,表示集合B中的元素个数。

第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。

集合中的所有元素均为int范围内的整数,n、m<=1000。

输出格式

第一行按从小到大的顺序输出A、B交集中的所有元素。

第二行按从小到大的顺序输出A、B并集中的所有元素。

第三行按从小到大的顺序输出B在A中的余集中的所有元素。

样例输入

5

1 2 3 4 5

5

2 4 6 8 10

蓝桥杯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); } } }

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/4e2501294.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*"<

13. 2.标题:激光样式 14.x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打 出光柱。 15.安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打 开! 16.国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激 光效果? 17.显然,如果只有3台机器,一共可以成5种样式,即: 18.全都关上(sorry, 此时无声胜有声,这也算一种) 19.开一台,共3种 20.开两台,只1种 21.30台就不好算了,国王只好请你帮忙了。 22.要求提交一个整数,表示30台激光器能形成的样式种数。 23.注意,只提交一个整数,不要填写任何多余的内容。 思路很简单,暴力搜索,30个灯光从左到右,从左边第一个开始,第一个可以开关,第二个要根据左边的灯光是否开启来取值,以此类推。。。答案2178309 1.#include 2.#include https://www.360docs.net/doc/4e2501294.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.}

蓝桥杯Java试题

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

蓝桥杯哦2010第一届大赛试题

第一题,以下函数的功能是将任意整数进行因式分解, 请完成该程序的空缺使函数能够正常运算 void f(int n) { for(int i=2; i1) printf(“%d\n”, n); } 第二题,以下函数的功能是将给定字符串进行倒序输出,请完成该函数空缺部分。 char* p = “abcdef”; char* q = (char*)malloc(strlen(p)+1); for(int i=0, int len=strlen(p); i

第三题,(这题的题目到底是要干啥,本人到现在沿未明了,数学学统计好,但可以确定原题给出的代码就是如此) int f(int m, int n) { int a = 1; int m1 = m; //—–(3)—- a *= m1–; int b = 1; while(n>1) b *= n–; return a / b; } 第四题,任意给出一个四位数, 把它重新组成一个四位的最大数和一个最小数, 算出两者间的差。 例如:3721这个数,可以重组成:7321和1237,相数之差为7321-1237 请完善下面这个函数,以实现此功能 int f(int n) { int N[4]; for(int i=0; i<4; i++) { N[3-i] = n % 10;

蓝桥杯(客观题)练习题

1.AT89系列单片机提供了两种省电方式:分别是__空闲模式_____和 ___掉电模式______。 2.远距离传输通常应采用__串行______通信。 3.MCS-51单片机有5个中断源,2个优先级,上电复位时,__外部中 断0______中断源优先级级别最高。 4.MCS-51单片机的堆栈区只可设置在_____片内RAM ____(器),堆 栈寄存器SP是____8___位寄存器。 5.MCS-51单片机外部中断请求信号有_电平方式________和脉冲方式, 在电平方式下,当采集到INT0、INT1的有效信号为___低电平______时,激活外部中断。 6.访问89C51片外数据存储器采用的是__寄存器间接_____寻址方式。 7.进行BCD码运算时,只需要在ADD和ADDC后面紧跟一条__DA __A____指令即可。 8.计算机(微处理器)能够直接识别并执行的语言是_机器语言______。 9.十六进制数D/A转换为十进制数是___218 _____,二进制数 10110110转换为十六进制数是__B6______。 10.键盘工作方式有三种,分别是__编程扫描______、___定时扫描 ______和中断扫描方式。 11.A/D转换的基本功能是把___模拟量______变成数字量。 12.溢出标志OV只有在进行___符号数______加法运算时才有意 义,OV=0表示加法运算结果__正确_____,OV=1表示加法运算结果超出了_________所能表达的符号数有效范围。

13.MCS51单片机的外部中断信号请求信号若设定为电平方式,只 有在中断请求引脚上采样到有效的___低电子______信号时,才能激活外部中断,而在脉冲方式时,只有在中断请求引脚上采样到脉冲的____后沿负跳_____有效信号时,才能激活外中断。 14.MCS51单片机的一个机器周期包含了___6______个状态周期, 每个状态周期又可划分为___2______拍节,一个机器周期实际又包含了______12___个震荡周期。 15.PCON寄存器中与串行通信有关的只有D7位(SMOD),该位为 波特率信增位。当SMOD=___1______时,串行口波特率增加1倍,当SMOD=_____0____时,串行口波特率为设定值。 16.外围的扩展芯片的选择方法有两种方式,它们分别是___线选法 ______和_____译码法____。 17.定时器的计数方式是对来自T0,T1引脚的脉冲计数,输入的 外部脉冲在___负跳变______时有效,计数器加1,定时功能也是通过计数器计数来实现的,定时功能下的计数脉冲来自单片机内部的____时针_____电路。 18.MCS-51单片机片内共有____128_____字节单元的RAM。 19.若MCS-51单片机的程序状态字PSW中的RSI,RS0=11,那么, 工作寄存器R0~R7的直接地址为__18H-1FH_______。 20.I/O编址技术有____独立编址_____和____统一编址_____两种方式。 21.I/O数据传送的控制方式有___中断驱动方式______,程序查询方 式和____通道控制方式_____。

蓝桥杯第一届初赛题目

第一届蓝桥杯预赛试题 c 本科 第一题,以下函数的功能是将任意整数进行因式分解, 请完成该程序的空缺使函数能够正常运算 void f(int n) { for(int i=2; i1) printf(“%d\n”, n); } 第二题,以下函数的功能是将给定字符串进行倒序输出,请完成该函数空缺部分。 char* p = “abcdef”; char* q = (char*)malloc(strlen(p)+1); for(int i=0, int len=strlen(p); i

q__1__ = p[i+1]; q[len-1] = p[0]; —–(2)—-; prin tf(“%s\n”, q); 第三题, int f(int m, int n) { int a = 1; int m1 = m; //—–(3)—- a *= m1–; int b = 1; while(n>1) b *= n–; return a / b; } 第四题,任意给出一个四位数, 把它重新组成一个四位的最大数和一个最小数, 算出两者间的差。 例如:3721这个数,可以重组成:7321和1237,相数之差为7321-1237 请完善下面这个函数,以实现此功能 int f(int n) { int N[4];

for(int i=0; i<4; i++) { N[3-i] = n % 10; —-(4)—- } for(i=0; i<3; i++) for(int j=0; j<3-i; j++) if(N[j]>N[j+1]) { int t = N[j+1]; N[j+1] = N[j]; N[j] = t; } int n_min=0; for(i=0; i<4; i++) n_min = n_min * 10 + N[i] ; int n_max = 0; for(i=3; i>=0; i–) n_max = n_max * 10 + N[i]; return n_max-n_min; } 第五题,假设有m+n个人,其中, m个人手持面额为5角的硬币, n个人手持面额为1元的硬币,

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

(完整版)蓝桥杯大赛青少年创意编程Scratch初级组模拟题

一、单选题(每题20分) 1、(难度系数1)在舞台添加小猫角色,它的所有设置均为默认设置。舞台布局和程序运行舞台布局程序运行结果 运行以下哪段程序后,可以得到以上结果。() A B C D以上程序都不对 2、(难度系数2)小猫看到远处好久不见的朋友,于是跳起来说“你好!”想引起朋友的注意,执行以下程序后,小猫说“你好!”一共几秒?() A 0 B 2 C4 D 8

3、(难度系数3)当角色执行完这段程序后,舞台可能出现的图形是?() A、正三角形 B、正四边形 C、正六边形 D、正八边形 4、(难度系数4)执行完这段程序后,变量b的值可能是?() A、11 B、65 C、130 D、6065

5、(难度系数5)小红想做一个月亮围绕地球旋转的动画,如图,舞台有两个角色:“地球”“月球”,并写如下程序,小红希望运行程序后,月球以地球为中心做圆周运动。() A、B、 B、D、

1、难度系数2,满分50分 准备工作:导入背景库中的“bedroom2”,并导入角色库中的“Abby”“Candy”角色。 编程实现: Abby打扫完房间,房间停电了,Abby点上了一根蜡烛。想象停电后,点上蜡烛的效果。 图1.“关灯以前” 图2.“关灯后”

1、程序开始运行时,显示如图1.“关灯以前” 2、2秒以后,背景变暗,屏幕左边的墙上出现比小猫自身还要大的影子,如图2.“关灯后”。 3、之后一直保持图2效果 4、蜡烛、Abby、影子之间和大小应大致正确。 将程序保存在桌面,命名为“1.sb2” 评判标准: 10分:程序运行后,按图1的效果显示并保持至少2秒钟; 30分:在10分的基础上,能按图2的要求背景变暗,出现Abby阴影; 50分:在30分的基础上,背景中的圣诞树仍可见,蜡烛、Abby、影子之间的位置关系 基本正确,Abby和影子的大小关系符号逻辑。 2、难度系数3,满分50分 编程实现:今天天气多云,小熊在海边散步,他的头顶飘来一朵云,一阵风吹来,云飘走了,越飘越远,最后消失在空中。 具体要求: 1、舞台背景选择图示背景,增加云朵、小熊角色。 2、程序开始运行时,“小熊”“云朵”角色出现在图1所示的位置。 3、“云朵”角色能实现“从小熊头顶飘离,并向右上角平滑地漂移,越飘越高,越飘越小,直到最后消失”的动画效果。 将程序保存在桌面,命名为“2.sb2” 图1 图2 图3 图4

蓝桥杯所有真题

2012(1) 假设有两种微生物X和Y,X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。现在已知有新出生的X=10, Y=89,求60分钟后Y的数目。如果X=10,Y=90 呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数目。题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只Y 就是最终导致Y 种群灭绝的最后一根稻草!请忍住悲伤,把答案写在“解答.txt”中,不要写在这里!(循环) 2012(2) 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA。他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。请你利用计算机的优势,找到破解的答案。把ABCDE 所代表的数字写出来。 答案写在“解答.txt”中,不要写在这里!(循环、递归) 2012(3) 有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”。请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。如果有多个可能的答案,请列出所有答案,每个答案占一行。格式是:人数,人数,...例如,有一种可能是:20,5,4,2,0。答案写在“解答.txt”中,不要写在这里!(循环、递归) #include void main() { int i,j,k,l; for(i=4;i<21;i++) { for(j=3;j

蓝桥杯试题标准答案(练习)

1、亲密数:假设有a、b两个数,若a的所有因子之和等于b,b的所有因子之和等于a,并且a不等于b,则称a和b是一对亲密数。如284和220就是一对亲密数。 #include int main() { int a,b,i,n; for(a=1;a<=10000;a++) { for(b=0,i=1;i<=a/2;i++) if(a%i==0) b+=i; for(n=0,i=1;i<=b/2;i++) if(b%i==0) n+=i; if(n==a&&a!=b&&a

int main() { long days = 5; /*1999年的最后一天为周5,把下一年加上5天对7取余为0的,则是周日*/ int i = 2000; for(;;) /*无循环终止条件,可以利用break语句终止循环*/ { if(i%4==0&&i%100!=0||i%400==0) { days = days%7+366; } else { days = days%7+365; } if(days%7==0&&i%100==99) { printf("%d",i); break; } i++; } return 0; } 3、马虎的算式:小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

蓝桥杯练习系统题目汇总

蓝桥杯练习系统题目汇总: 入门训练 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 数据规模与约定

蓝桥杯试题C语言答案

1、A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些 人参加了竞赛: (1)A参加时,B也参加; (2)B和C只有一个人参加; (3)C和D或者都参加,或者都不参加; (4)D和E中至少有一个人参加; (5)如果E参加,那么A和D也都参加。 00110 c、d #include<> int main() { int a,b,c,d,e; /*0表示不参加, 1表示参加.*/ for(a=0;a<2;a++) for(b=0;b<2;b++) for(c=0;c<2;c++) for(d=0;d<2;d++) for(e=0;e<2;e++) { if(a&&!b) continue; if(b&&c||!b&&!c) continue; if(c&&!d||!c&&d) continue; if(!d&&!e) continue; if(e&&(!a||!d)) continue; printf("%d%d%d%d%d",a,b,c,d,e); } return 0; } 2、某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件: 1)A和B两人中至少去一人; 2)A和D不能一起去; 3)A、E和F三人中要派两人去; 4)B和C都去或都不去; 5)C和D两人中去一个; 6)若D不去,则E也不去。 试编写一个程序,输出问应当让哪几个人去? #include<> int main() { int a,b,c,d,e,f; for(a=1;a>=0;a--) for(b=1;b>=0;b--)/*1:去 0:不去*/ for(c=1;c>=0;c--)

蓝桥杯C语言本科B组预赛试题

蓝桥杯C语言本科B组预赛试题

————————————————————————————————作者:————————————————————————————————日期:

2014蓝桥杯C/C++语言本科B组预赛试题(完整) 1.啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。 注意:答案是一个整数。请通过浏览器提交答案。 不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。 2.切面条 一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么,连续对折10次,中间切一刀,会得到多少面条呢? 答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。 3.李白打酒

话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。 注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。 4.史丰收速算 史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法。 其中,乘以7是最复杂的,就以它为例。 因为,1/7是个循环小数:0.142857...,如果多位数超过142857...,就要进1 同理,2/7,3/7, ...6/7 也都是类似的循环小数,多位数超过n/7,就要进n

蓝桥杯模拟题加真题

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 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.return 0; 15.} 2、问题描述 给定圆的半径r,求圆的面积。 输入格式 输入包含一个整数r,表示圆的半径。

输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。 说明:在本题中,输入是一个整数,但是输出是一个实数。 对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。 实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。 样例输入 4 样例输出 50.2654825 数据规模与约定 1 <= r <= 10000。 提示 本题对精度要求较高,请注意π的值应该取较精确的值。你可以使用常量来表示π,比如PI=3.14159265358979323,也可以使用数学公式来求π,比如PI=atan(1.0)*4。 1.#include 2.#include 3. 4.int main() 5.{ 6.int r; 7.double s, PI; 8.scanf("%d", &r); 9.PI = atan(1.0) * 4; 10.s = PI * r * r; 11.printf("%.7lf", s); 12.return 0; 13.} 3、问题描述 求1+2+3+...+n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值。 样例输入 4 样例输出 10 样例输入

2016蓝桥杯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); } } } return 0; } 第三题 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见【图1.jpg】) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法。

蓝桥杯算法vip训练习题与答案带测试数据1

算法训练 编号:ALGO-1 题目:区间k大数查询列 关键字:排序查找 类型:普通试题 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。 输入格式 第一行包含一个数n,表示序列长度。 第二行包含n个正整数,表示给定的序列。 第三个包含一个正整数m,表示询问个数。 接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。 输出格式 总共输出m行,每行一个数,表示询问的答案。

样例输入 5 1 2 3 4 5 2 1 5 2 2 3 2 样例输出 4 2 数据规模与约定 对于30%的数据,n,m<=100; 对于100%的数据,n,m<=1000; 保证k<=(r-l+1),序列中的数<=1000000。本题的Java参考代码如下: import java.io.BufferedInputStream; import java.io.IOException; import java.util.Arrays; public class Main {

private static BufferedInputStream in = new BufferedInputStream(System.in);//回顾一下 public static void main(String[] args) throws IOException、//回顾 { int[] nums = new int[readInt()];//重点看一下 for(int i=0; i0; i--) { int a = readInt(); int b = readInt(); int c = readInt();//?? int[] tn = new int[b-a+1]; for(int j=0; j

历年蓝桥杯省赛B组真题试题

(1) 煤球数目 有一堆煤球,堆成三角棱锥形。具体:第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形),.... 如果一共有100层,共有多少个煤球?题解:纯粹的数学题而已 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);

(2) 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 题解:暴力枚举。 第一重循环枚举刚开始过生日时候的岁数。 第二重循环是枚举现在的岁数 第三重循环就是将刚开始过生日的岁数和现在的岁数加起来。 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); } }

B DEF A + — + —— = 10 C GHI (如果显示有问题,可以参见【图1.jpg】) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 比如: 6+8/3+952/714 就是一种解法, 5+3/1+972/486 是另一种解法。 这个算式一共有多少种解法?//29 题解:DFS+回溯 由于计算机中5/2会等于2,而且如果打算采用精度方面的处理的话,会很麻烦,而且很容易错。 所以,把这些式子全部变成乘法形式就好了。 A*C*GHI+B*GHI+DEF*C=10*C*GHI

第十届蓝桥杯青少赛Scratch组试题

上表由裁判填写,请参赛选手及阅卷裁判签名确认上述成绩准确无误,选手_________、裁判_________ 注意事项: 1.赛场内应保持安静,参赛选手间严禁互相交谈,违者将被取消比赛资格; 2.比赛过程中,笔记本计算机不得开启WLAN或蓝牙等各种无线通讯功能,违者将被取消比赛资格; 3.比赛过程中,应将准考证及身份证件放置桌子左上角,以备监考人员随时核对、检查; 4.参赛选手的手机在检录后必须保持关闭状态直至比赛结束,违者将被取消比赛资格; 5.比赛过程中,笔记本电脑须调为静音; 6.请在做题之前认真阅读题目,编程题目设置有步骤分,即只完成部分功能也可以得到相应的分数; 7.比赛答卷时间为90分钟; 8.比赛结束后,请自行整理所有自带设备及配件,并妥善带出赛场,尤其不要遗漏电源、连线或其他零部 件; 9.比赛结束时裁判现场判卷结束后,本赛卷一律交给判卷裁判,比赛选手不得自行带走,否则取消比赛成 绩。

一、单选题(每题20分) 第一题(难度系数1) 看,前方有一个苹果!想一想,下面哪段程序能帮助小猫拿到它呢? A B C D 第二题(难度系数2) 以下哪个选项不是说积木的结果? A: 7 B: 18 C: 3 D: 21

小法师被挡在墙外面,他要施展法术穿墙而过。除了“隐藏”积木块之外,还有哪个积木块可以帮他穿墙而过?A: B: C: D: 第四题(难度系数4) 角色小猫在运行如下程序5秒后,舞台上能看到几只小猫? A: 2 B: 3 C: 4 D: 5

运行上面的程序,角色说的结果为? A: 1 B: 2 C: 3 D: 4 二、判断题(每题20分,在括号里画“×”或“√”)第一题(难度系数1) 执行完这段程序后,可以在舞台上画出一条蓝色的直线。()

相关文档
最新文档