螺旋方阵.cpp
螺旋方阵存放在n*n的二维数组中并将其打印输出,要求n由程序读入,数字螺旋方阵由程序自动生成(而非人为的初始化或逐个输入)。
例如: 1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9
12蓝桥杯决赛答案 第五题
“数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。
如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部分含有6个小格(以下也称为分组)。
开始的时候,某些小格中已经填写了字母(ABCDEF之一)。需要在所有剩下的小格中补填字母。
全部填好后,必须满足如下约束:
1. 所填字母只允许是A,B,C,D,E,F 中的某一个。
2. 每行的6个小格中,所填写的字母不能重复。
12蓝桥杯决赛答案 第四题
#include <string.h>
int f(char a1[],char b1)
{
int m=strlen(a1);
int n=strlen(b1); //计算两个字符串的长度
int *d=new int[n+1];
int i,j,x,y,f;
}
void main()
{
char a[10000]={""};
char b[10000]={""};
12蓝桥杯决赛答案 第三题
在很多软件中,输入拼音的首写字母就可以快速定位到某个词条。比如,在铁路售票软件中,输入: “bj”就可以定位到“北京”。怎样在自己的软件中实现这个功能呢?问题的关键在于:对每个汉字必须能计算出它的拼音首字母。
GB2312汉字编码方式中,一级汉字的3755个是按照拼音顺序排列的。我们可以利用这个特征,对常用汉字求拼音首字母。
GB2312编码方案对每个汉字采用两个字节表示。第一个字节为区号,第二个字节为区中的偏移号。为了能与已有的ASCII编码兼容(中西文混排),区号和偏移编号都从0xA1开始。
我们只要找到拼音a,b,c,...x,y,z 每个字母所对应的GB2312编码的第一个汉字,就可以定位所有一级汉字的拼音首字母了(不考虑多音字的情况)。下面这个表给出了前述信息。请你利用该表编写程序,求出常用汉字的拼音首字母。
a 啊 B0A1
b 芭 B0C5
c 擦 B2C1
d 搭 B4EE
e 蛾 B6EA
12蓝桥杯决赛答案 第二题
某工业监控设备不断发回采样数据。每个数据是一个整数(0到1000之间)。各个数据间用空白字符(空格,TAB或回车换行)分隔。这些数据以文本形式被存储在文件中。
因为大多数时候,相邻的采样间隔数据是相同的,可以利用这个特征做数据的压缩存储。其方法是:对n(n>1)个连续相同的数字只记录n和该数字本身;对m(m>0)个连续不重复的数字,
则记录 m*-1 和这些数字本身(之所以用负数,是为了与第一种情况区分,便于解压缩)。
例如:采样数字:
12 34 34 25 25 25 25 11 15 17 28 14 22 22 22 13
则根据上述规则变化后:
-1 12 2 34 4 25 -5 11 15 17 28 14 3 22 -1 13
下面的程序实现了这个功能。请仔细阅读分析代码,填写空白的部分。
12蓝桥杯决赛答案 第一题
12蓝桥杯决赛答案 第一题
13蓝桥杯预赛答案 第10题
标题:连号区间数
小明这些天一直在思考这样一个奇怪而有趣的问题:
在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:
如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,
则称这个区间连号区间。
(注意此题解题关键在于数列从小到大排序最大值减最小值就是区间长度;是直接将数组操作,不是进行递增排序后在找的)
当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
输入格式:
第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。
第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。
#include <stdio.h>
//(注意此题解题关键在于数列从小到大排序最大值减最小值就是区间长度;是直接将数组操作,不是进行递增排序后在找的)
int main()
{
int i,j,max,min,count=0,n;
int a[50002];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
max=a[i];min=a[i];
for(j=i+1;j<=n;j++)
{
if(a[j]>max)
max=a[j];
13蓝桥杯预赛答案 第9题
标题:带分数
100 可以表示为带分数的形式:100 = 3 + 69258 / 714
还可以表示为:100 = 82 + 3546 / 197
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
题目要求:
从标准输入读入一个正整数N (N<1000*1000)
程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。
注意:不要求输出每个表示,只统计有多少表示法!
#include <stdio.h>
long int n; //从键盘输入的正整数N (N<1000*1000)
int a[10]={0,0,0,0,0,0,0,0,0,0,};
int num=0; //记录满足条件的次数
int t; //判断是否1~9都出现了
int hefa(int l)
{
while(l)
{
if(a[l]) return 0; //不满足条件
a[l]=1;
l /= 10;
t++;
}
13蓝桥杯预赛答案 第8题
题目标题:翻硬币
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:
程序输入:
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000
程序输出:
一个整数,表示最小操作步数
例如:
#include <stdio.h>
int f(char *a,char *b)
{
int mun=0;
while(*a) //只要a没有结束就做
{
while(*a && *a==*b) //如果a跟b里面的值相同就将a,b都指向后一个
{
a++;b++;
}
if(*a)
{
*a=(*a=='*') ? 'o':'*';
*(a+1)=(*(a+1)=='*') ? 'o':'*';
mun++;
}
}
return mun;
}
13蓝桥杯预赛答案 第7题
标题:错误票据
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000)
每个整数代表一个ID号。
要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
例如:
13蓝桥杯预赛答案 第6题
标题:三部排序
一般的排序有许多经典算法,如快速排序、希尔排序等。
但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
比如,对一个整型数组中的数字进行分类排序:
使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!!
以下的程序实现了该目标。
其中x指向待排序的整型数组,len是数组的长度。
13蓝桥杯预赛答案 第5题
题目标题:前缀判断
如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。
比如:"abcd1234" 就包含了 "abc" 为前缀
char* prefix(char* haystack_start, char* needle_start)
{
char* haystack = haystack_start;
13蓝桥杯预赛答案 第三题
nclude <stdio.h>
int count=0;
void f(int a,int b)
{
if( a == 1) //说明走完了
{
if(b==0) //此次走一步一定能到 要是右脚就到了
count++;
return;
}
if( a == 2) //说明走完了 只要是还有2步有且只有一次可以走到吧
{
count++;
return;
13蓝桥杯预赛答案 第二题
标题: 马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
#include <stdio.h>
int main(void)
{
int a,b,c,d,e; //定义5个数
int m,n,m1,n1;
int num=0;
for( a=1;a<=9;a++)
{
for( b=1;b<=9;b++)
13年蓝桥杯预赛答案 第一题
题目标题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
#include <stdio.h>
int yue[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(void)
{
// int s1[3]={1777,4,30};
int s[3]={1777,4,30};
int m;
printf( " 请输入数:");
scanf("%d",&m);
m=m-1; //由于出生那天算第一天
for(;m > 365;) //对年的操作
{
s[0]=s[0]+1;
if((s[0] % 100 != 0 && s[0]%4 ==0) || s[0