蓝桥杯c++试题a组,蓝桥杯往年试题c组
一个
有些人迷信数字,例如,带“4”的数字,被认为与“死”谐音,他们觉得不吉利。
这些说法虽然纯属无稽之谈,但有时也不得不迎合大众的需求。一张彩票的彩票号码为5位数(10-99),要求其中不能出现带“4”的数字。主办方让你计算任意两张彩票没有编号的情况下可以发行的彩票的最大数量。
请提交这个数字(整数),不要写任何多余的内容或说明性的文字。
答:第一位不取0和4,其余四位不取4,8*9*9*9*9。
2
银河炸弹
在X星系浩瀚的太空中漂浮着许多行星X的人造“炸弹”,它们被用作宇宙中的路标。
每个炸弹被设定爆炸后多少天。
例如,如果阿尔法炸弹在2015年1月1日放置15天,它将在2015年1月16日爆炸。
有一个beta炸弹,是2014年11月9日投放的,时机是1000天。请计算出它爆炸的确切日期。
请按yyyy-mm-dd的格式填写日期,即4位数字的年,2位数字的月,2位数字的日。例如:2015年2月19日
请严格按照格式写。不能出现其他文字或符号。
答案:2017-08-05
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
使用命名空间std
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool isleap(跨年度)
{
if((year % 4==0 year % 100!=0) 年% 400==0)
返回true
返回false
}
int main()
{
int year=2014
int月,日;
int sum=1000-52;//到今年年底的剩余时间
int sum1
while(真)
{
if(isleap(第1年))
{
sum1=366
}
其他
{
sum1=365
}
if(sum sum1)
{
年份;
打破;
}
其他
{
年份;
sum-=sum 1;
}
}
if(isleap(year))
{
mon[2];
}
for(int I=1;i=12我)
{
if(sum mon[i])
{
sum-=mon[I];
}
其他
{
月=I;
打破;
}
}
日=和;
printf(%d %d %d\n ,年,月,日);
返回0;
}3
三阳鲜瑞
遵守以下加法公式:
响水盛辉
三阳鲜瑞
-
三羊生壮气。
(如果有对齐问题,请参考[图1.jpg])
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请填写“三羊献功德”代表的四位数字(答案唯一),不要填写任何多余的内容。
答案:1085
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
使用命名空间std
int a[10];
int visit[10]={ 0 };
void dfs(int cur)
{
if(cur==8)
{
int sum=a[0]* 1000 a[1]* 100 a[2]* 10 a[3];
int sum 1=a[4]* 1000 a[5]* 100 a[6]* 10 a[1];
int sum 2=a[4]* 10000 a[5]* 1000 a[2]* 100 a[1]* 10 a[7];
if(sum sum1==sum2)
{
printf(%d %d %d\n ,sum,sum1,sum 2);
}
返回;
}
for(int I=0;i 10我)
{
if(i==0 cur==0)
继续;
if(i==0 cur==4)
继续;
如果(!拜访[我])
{
visit[I]=1;
a[cur]=I;
DFS(cur 1);
visit[I]=0;
}
}
}
int main()
{
DFS(0);
返回0;
}4
中间电网输出
StringInGrid函数在指定大小的网格中打印指定的字符串。
要求弦在水平和垂直方向都居中。
如果字符串太长,它将被截断。
如果不能刚好居中,可以稍微偏左或者稍微偏上。
下面的程序实现了这个逻辑。请在下划线部分填写缺失的代码。
#包含stdio.h
#包含字符串. h
void string grid(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宽度-2;I)printf(-);
printf( \ n );
for(k=1;k(高度-1)/2;k ){
printf( );
for(I=0;I宽度-2;I)printf(“”);
printf( \ n );
}
printf( );
printf(%*s%s%*s ,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _);//填空
printf( \ n );
for(k=(高度-1)/2 ^ 1;k高度-1;k ){
printf( );
for(I=0;I宽度-2;I)printf(“”);
printf( \ n );
}
printf(“”);
for(I=0;I宽度-2;I)printf(-);
printf( \ n );
}
int main()
{
string grid(20,6, ABCD 1234 );
返回0;
}
对于标题中的数据,您应该输出:
-
abcd1234
-(如果有对齐问题,请参考[图1.jpg])
注意:只填写缺失的内容,不要写任何已有的代码或说明性文字。
回答:(width-strlen (s)-2)/2,",s,(width-strlen (s)-1)/2,"(什么鬼,完全看不懂)
五
九数组分数
1,2,3.9这九个数组成一个分数,它的值正好是1/3。你是怎么把它们结合起来的?
下面的程序实现了这个功能。请在下划线部分填写缺失的代码。
1 #包含stdio.h
2
3void测试(int x[])
4 {
5 int a=x[0]* 1 x[1]* 100 x[2]* 10 x[3];
6 int b=x[4]* 10 x[5]* 1 x[6]* 100 x[7]* 10 x[8];
七
8 if (a *3==b) printf(%d/%d\n ,a,b);
9 }
10
11void f(int x[],int k)
12 {
13 int i,t;
14如果(k=9)
15 {
16测试(x);
17返回;
18 }
19
20 for(I=k;我我)
21 {
22 { t=x[k];x[k]=x[I];x[I]=t;}
23 f(x,k ^ 1);
24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
25 }
26 }
27
28int main()
29 {
30 int x[]={1,2,3,4,5,6,7,8,9 };
31 f(x,0);
32 return0
33 }
注意:只填写缺失的内容,不要写任何已有的代码或说明性文字。
回答:简单的回溯就是把代码全部排好,把顺序倒过来就行了。
t=x[k];x[k]=x[I];x[I]=t;
我以为是我写的代码。写了一次就贴了。
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
使用命名空间std
int a[10];
int visit[10]={ 0 };
void dfs(int cur)
{
if(cur==9)
{
int sum=a[0]* 10000 a[1]* 1000 a[2]* 100 a[3]* 10 a[4];
int sum 1=a[5]* 1000 a[6]* 100 a[7]* 10 a[8];
if(sum % sum1==0 sum/sum1==3)
{
printf(%d %d\n ,sum,sum 1);
}
返回;
}
for(int I=0;i 10我)
{
if(i==0 cur==0)
继续;
if(i==0 cur==4)
继续;
如果(!拜访[我])
{
visit[I]=1;
a[cur]=I;
DFS(cur 1);
visit[I]=0;
}
}
}
int main()
{
DFS(0);
返回0;
}6
加法乘法
我们都知道:1 2 3.49=1225
现在要求你把两个不相邻的加号变成乘号,这样结果就是2015。
例如:
1 2 3 .10*11 12 .27*28 29 .49=2015
就是符合要求的答案。
请寻找另一个可能的答案,并提交前面乘法符号左侧的数字(例如,提交10)。
注意:要求提交的是整数,不要填写任何多余的内容。
答案:16
列举乘法符号的位置。
49个数字中有48个符号。
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
使用命名空间std
int main()
{
for(int I=1;i=46我)
{
for(int j=I ^ 2;j=48j)
{
int sum=0;
for(int k=1;k I;k)
{
sum=k;
}
sum=I *(I 1);
for(int k=I ^ 2;k j;k)
{
sum=k;
}
sum=j *(j ^ 1);
for(int k=j ^ 2;k=49k)
{
sum=k;
}
if(sum==2015)
{
printf(%d %d\n ,I,j);
}
}
}
}
七
小明被劫持到X赌场,被迫与另外三人打牌。
一副扑克牌(共52张,不包括大小王牌),平均分配给4个人,每人13张。
这时,小明的脑海里突然产生了一个疑问:
如果不考虑花色,只考虑点数,不考虑拿到的牌的顺序,你手里能拿到多少种初始牌组合?
请填写整数,不要填写任何多余的内容或说明文字。
答案:3598180(每张牌的号码是0,1,2,3,4)。就列举一下吧。
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
使用命名空间std
int ans=0;
void dfs(int cur,int sum)
{
if(sum 13)
{
返回;
}
if(cur==13)
{
if(sum==13)
{
ans
}
返回;
}
for(int I=0;I=4;我)
{
dfs(cur 1,sum I);
}
}
int main()
{
dfs(0,0);
printf(%d\n ,ans);
返回0;
}
八
行星X居住区的建筑都是一样的,以矩阵模式排列。它的建筑编号是1、2和3。
当一排排满时,按相反方向给下一排相邻的建筑编号。
例如,当单元号的宽度为6时,起始情况如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .
我们的问题是:已知两个楼号M和N,需要找到它们之间的最短移动距离(不能对角移动)。
输入3个整数w m n,用空格分隔,都在1到10的范围内。
w是行号的宽度,m,n是要计算的楼号。
需要一个整数来表示两个楼层之间的最短移动距离。
例如:
用户输入:
6 8 2
然后,程序应该输出:
四
另一个例子:
用户输入:
4 7 20
然后,程序应该输出:
五
资源投入:
峰值内存消耗为256M
1毫秒CPU消耗
请严格按照要求输出,不要打印“请输入.”之类的多余内容。
所有代码放在同一个源文件中,调试完成后,复制并提交源代码。
注意:main函数需要返回0。
注意:只使用ANSI C/ANSI C标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意:所有依赖函数必须在源文件#include xxx中显式,通用头文件不能通过工程设置省略。
提交时,请注意选择预期的编译器类型。
答案:求每个数字的坐标,将横坐标和纵坐标相减得到绝对值,再相加。
#包括iostream
#包括cstdio
#包含cstdlib
#包含算法
#包括队列
#包括堆栈
#包含地图
#包括cstring
#包括限制
#包含cmath
#包括cctype
const int INF=0x 3 F3 F3 f 3 f;//1061109567
typedef long long ll
使用命名空间std
int main()
{
int w,m,n;
while(scanf(%d%d%d ,w,m,n)!=EOF)
{
int a=m/w;
If(m% w==0)//每个数的横轴和纵轴从0开始,除法的横轴减1。
a-=1;
int b=n/w;
如果(n % w==0)
b-=1;
int c,d;
if(a % 2==1)
{
c=ABS(m-w *(a1));
}
其他
{
c=m-(w * a 1);
}
if(b % 2==1)
{
d=ABS(n-w *(B1));
}
其他
{
d=n-(w * B1);
}
int sum=ABS(a-b)ABS(c-d);
printf(%d\n ,sum);
}
返回0;
}
版权归作者所有:原创作品来自博主MB 62A10 DE EFD 92,转载请联系作者获得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。