当前位置:文档之家› 2016蓝桥杯c-c++省赛试题及答案解析

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

{
init();
dfs(0);
printf("%d\n",ans);
return 0;
}
第七题
剪邮票
如【图1.jpg】,有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
if(abs(mpt[x][y] - mpt[i][j]) == 1) book = false;
}
}
}
if(book) ans ++;
}
void dfs(int index)
{
int x,y;
x = index / 4;
y = index % 4;
if( x == 3)
{
Solve();
return;
(以下省略,总共101行)
#include <stdio.h>
#define N 6
#define M 5
#define BUF 1024
void f(int a[], int k, int m, char b[])
{
int i,j;
if(k==N){
b[M] = 0;
if(m==0) printf("%s\n",b);
return;
}
for(i=0; i<=a[k]; i++){
for(j=0; j<i; j++) b[M-m+j] = k+'A';
______________________; //填空位置
}
}
int main()
{
int a[N] = {4,2,2,1,1,3};
char b[BUF];
f(a,0,M,b);
{
if(p<r){
int q = partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int main()
{
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N = 12;
quicksort(a, 0, N-1);
下面的代码是一种实现,请分析并填写划线部分缺少的代码。
#include <stdio.h>
void s a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
int partition(int a[], int p, int r)
{
int i = p;
//判断五个数是否能连在一起
void dfs_find(int x,int y)
{
for(int i = 0 ; i < 4 ; i++)
{
int tx,ty;
tx = x + dir[i][0];
ty = y + dir[i][1];
if(tx < 0 || tx >= 3 || ty < 0 || ty >= 4) continue;
{
if(!visit[i])
{
visit[i] = true;
num[index] = i;
dfs_creat(index+1);
visit[i] = false;
}
}
}
int main()
{
init();
dfs_creat(1);
printf("%d\n",ans);
}
if(flag[x][y])
{
for(int i = 0 ; i < 10 ; i ++)
{
if(!visit[i])
{
visit[i] = true;
mpt[x][y] = i;
dfs(index+1);
visit[i] = false;
}
}
}
else
{
dfs(index+1);
}
}
int main()
{
Count = 1;
mpt_visit[x][y] =1;
dfs_find(x,y);
break;
}
}
if(Count == 5)
{
ans ++;
}
}
//创建5个数的组合
void dfs_creat(int index)
{
if(index == 6)
{
Solve();
return;
}
for(int i = num[index-1] + 1; i < 13 ; i ++)
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
答案:116
#include <stdio.h>
#include <string.h>
int mpt[3][4];
int mpt_visit[3][4];
int num[6];
int have[13];
int visit[13];
for(i=0; i<N; i++) printf("%d ", a[i]);
printf("\n");
return 0;
}
注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
答案:s)
第五题
抽签
X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
比如:
6+8/3+952/714就是一种解法,
5+3/1+972/486是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
答案:29
#include<stdio.h>
int ans = 0;
int num[10];
bool visit[10];
void Solve()
flag[i][j] = 1;
flag[0][0] = 0;
flag[2][3] = 0;
}
void Solve()
{
int dir[8][2] = { 0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};
int book = true;
for(int i = 0 ; i < 3 ; i ++)
#include<stdio.h>
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 ++)
int j = r + 1;
int x = a[p];
while(1){
while(i<r && a[++i]<x);
while(a[--j]>x);
if(i>=j) break;
s);
}
______________________;
return j;
}
void quicksort(int a[], int p, int r)
if(have[mpt[tx][ty]] == 0 || mpt_visit[tx][ty])continue;
mpt_visit[tx][ty] = 1;
Count ++;
dfs_find(tx,ty);
}
}
void Solve()
{
int i;
memset(have,0,sizeof(have));
return 0;
}
仔细阅读代码,填写划线部分缺少的内容。
注意:不要填写任何已有内容或说明性文字。
答案f(a,k+1,m-j,b)或f(a,k+1,m-i,b)
第六题
方格填数
如下的10个格子
+--+--+--+
| | | |
+--+--+--+--+
| | | | |
+--+--+--+--+
| | | |
#include <math.h>
int flag[3][4]; //表示哪些可以填数
int mpt[3][4]; //填数
bool visit[10];
int ans = 0;
void init() //初始化
{
int i,j;
for(i = 0 ; i < 3 ; i ++)
for(j = 0 ; j < 4 ; j ++)
相关主题