蓝桥杯C组试题及答案讲解Word格式文档下载.docx

上传人:b****2 文档编号:4133297 上传时间:2023-05-02 格式:DOCX 页数:46 大小:28.75KB
下载 相关 举报
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第1页
第1页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第2页
第2页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第3页
第3页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第4页
第4页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第5页
第5页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第6页
第6页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第7页
第7页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第8页
第8页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第9页
第9页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第10页
第10页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第11页
第11页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第12页
第12页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第13页
第13页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第14页
第14页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第15页
第15页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第16页
第16页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第17页
第17页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第18页
第18页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第19页
第19页 / 共46页
蓝桥杯C组试题及答案讲解Word格式文档下载.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

蓝桥杯C组试题及答案讲解Word格式文档下载.docx

《蓝桥杯C组试题及答案讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《蓝桥杯C组试题及答案讲解Word格式文档下载.docx(46页珍藏版)》请在冰点文库上搜索。

蓝桥杯C组试题及答案讲解Word格式文档下载.docx

我年龄的4次方是个6位数。

这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。

  请你推算一下,他当时到底有多年轻。

  通过浏览器,直接提交他那时的年龄数字。

不要提交解答过程,或其它的说明文字。

18

  4.标题:

幻方填空

  幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。

  欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。

  他把1,2,3,...16这16个数字填写在4x4的方格中。

  如图p1.jpg所示,即:

  16?

?

13

  ?

11?

  9?

*

15?

1

  表中有些数字已经显露出来,还有些用?

和*代替。

  请你计算出?

和*所代表的数字。

并把*所代表的数字作为本题答案提交。

12

  5.题目标题:

公约数公倍数

  我们经常会用到求两个整数的最大公约数和最小公倍数的功能。

  下面的程序给出了一种算法。

  函数myfunc接受两个正整数a,b

  经过运算后打印出它们的最大公约数和最小公倍数。

  此时,调用myfunc(15,20)

  将会输出:

  3

  60

  //交换数值

  voidswap(int*a,int*b)

  {

  inttemp;

  temp=*a;

  *a=*b;

  *b=temp;

  }

  voidmyfunc(inta,intb)

  intm,n,r;

  if(a

  m=a;

n=b;

r=a%b;

  while(r!

=0)

  a=b;

b=r;

  r=a%b;

  printf("

%d\n"

b);

//最大公约数

____________________________________);

//最小公倍数

  请分析代码逻辑,并推测划线处的代码,通过网页提交。

m*n/b

  6.标题:

三部排序

  一般的排序有许多经典算法,如快速排序、希尔排序等。

  但实际应用时,经常会或多或少有一些特殊的要求。

我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。

  比如,对一个整型数组中的数字进行分类排序:

  使得负数都靠左端,正数都靠右端,0在中部。

注意问题的特点是:

负数区域和正数区域内并不要求有序。

可以利用这个特点通过1次线性扫描就结束战斗!

  以下的程序实现了该目标。

  其中x指向待排序的整型数组,len是数组的长度。

  voidsort3p(int*x,intlen)

  intp=0;

  intleft=0;

  intright=len-1;

  while(p<

=right){

  if(x[p]<

0){

  intt=x[left];

  x[left]=x[p];

  x[p]=t;

  left++;

  p++;

  elseif(x[p]>

  intt=x[right];

  x[right]=x[p];

  right--;

  else{

  __________________________;

//填空位置

  如果给定数组:

25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0

则排序后为:

  -3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25

  请分析代码逻辑,并推测划线处的代码,通过网页提交

p++

  7.标题:

核桃的数量

  小张是软件项目经理,他带领3个开发组。

工期紧,今天都在加班呢。

为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。

他的要求是:

  1.各组的核桃数量必须相同

  2.各组内必须能平分核桃(当然是不能打碎的)

  3.尽量提供满足1,2条件的最小数量(节约闹革命嘛)

  程序从标准输入读入:

  abc

  a,b,c都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<

30)

  程序输出:

  一个正整数,表示每袋核桃的数量。

  例如:

  用户输入:

  245

  20

  再例如:

  311

  #include

  voidswap(int*a,int*b)

  temp=*a;

  *a=*b;

  *b=temp;

  intf(inta,intb)

  intm,n,r;

  if(a

  m=a,n=b,r=a%b;

  while(r!

=0)

  a=b;

  b=r;

  r=a%b;

  returnm*n/b;

  intmain()

  inta,b,c;

  scanf("

%d%d%d"

&

a,&

b,&

c);

%d"

f(f(a,b),f(b,c)));

  return0;

  8.题目标题:

打印十字图

  小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg)

  $$$$$$$$$$$$$

  $$

  $$$$$$$$$$$$$$$

  $$$$

  $$$$$$$$$$$$$

  $$$$$$

  $$$$$$$$$$$

  $$$$$$$

  $$$$$$$$$$$

  对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

  为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。

  输入格式:

  一个正整数n(n<

30)表示要求打印图形的层数

  输出:

  对应包围层数的该标志。

  1

  程序应该输出:

  ..$$$$$..

  ..$...$..

  $$$.$.$$$

  $...$...$

  $.$$$$$.$

  ..$$$$$$$$$$$$$..

  ..$...........$..

  $$$.$$$$$$$$$.$$$

  $...$.......$...$

  $.$$$.$$$$$.$$$.$

  $.$...$...$...$.$

  $.$.$$$.$.$$$.$.$

  $.$.$...$...$.$.$

  $.$.$.$$$$$.$.$.$

  请仔细观察样例,尤其要注意句点的数量和输出位置。

  intgo(inti,intj,intn)

  if(i>

n*2+3)

  i=n*4+6-i;

  if(j>

  j=n*4+6-j;

  if(i<

j)swap(&

i,&

j);

=2&

&

j<

=2)return0;

  if(i%2==1&

j>

=i-2)return1;

  if(j%2==1&

j!

=i-1)return1;

  intn;

n);

  inti,j;

  for(i=1;

i<

=n*4+5;

i++)

  for(j=1;

j++)

  if(go(i,j,n))

$"

);

  else

."

\n"

  9.标题:

带分数

  100可以表示为带分数的形式:

100=3+69258/714

  还可以表示为:

100=82+3546/197

  注意特征:

带分数中,数字1~9分别出现且只出现一次(不包含0)。

类似这样的带分数,100有11种表示法。

  题目要求:

  从标准输入读入一个正整数N(N<

1000*1000)

  程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。

不要求输出每个表示,只统计有多少表示法!

  100

  11

  105

  6

  #defineN9

  intnum[N]={1,2,3,4,5,6,7,8,9};

  inttag[3][3]={{4,3,2},{5,3,1},{6,2,1}};

  intgo(inti,intn)

  intcount=0;

  for(a=0;

a<

3;

a++)

  intr[3]={0},d=0;

  for(b=0;

b<

b++)

  for(c=0;

c<

tag[a][b];

c++)

  r[b]=r[b]*10+num[d++];

  if(r[0]+r[1]/r[2]==n&

r[1]%r[2]==0)count++;

  if(r[0]+r[2]/r[1]==n&

r[2]%r[1]==0)count++;

  if(r[1]+r[0]/r[2]==n&

r[0]%r[2]==0)count++;

  if(r[1]+r[2]/r[0]==n&

r[2]%r[0]==0)count++;

  if(r[2]+r[0]/r[1]==n&

r[0]%r[1]==0)count++;

  if(r[2]+r[1]/r[0]==n&

r[1]%r[0]==0)count++;

  while(i<

N)

  intk=i+1;

  while(k<

  swap(num+i,num+k);

  count+=go(i+1,n);

  k++;

  i++;

  returncount;

go(0,n));

  10.标题:

剪格子

  如图p1.jpg所示,3x3的格子中填写了一些整数。

  我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60。

  本题的要求就是请你编程判定:

对给定的mxn的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。

  如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。

  如果无法分割,则输出0

  程序输入输出格式要求:

  程序先读入两个整数mn用空格分割(m,n<

10)

  表示表格的宽度和高度

  接下来是n行,每行m个正整数,用空格分开。

每个整数不大于10000

在所有解中,包含左上角的分割区可能包含的最小的格子数目。

  33

  10152

  20301

  123

  则程序输出:

  43

  1111

  130802

  111100

  10

  #defineN10

  intnum[N][N];

  inttag[N][N]={0};

  intm,n;

  intr=100;

  intfind(inti,intj,intt,intntag[][N])

0||i>

=n||j<

0||j>

=m||ntag[i][j]==1)

  ntag[i][j]=1;

  if(tag[i][j]!

=t)

  count++;

  count+=find(i-1,j,t,ntag);

  count+=find(i+1,j,t,ntag);

  count+=find(i,j-1,t,ntag);

  count+=find(i,j+1,t,ntag);

  intisbad()

  inti,j,k=0;

  intt=tag[0][0];

  intntag1[N][N]={0};

  intntag2[N][N]={0};

  intge1=find(0,0,t,ntag1);

  for(i=0;

n;

  for(j=0;

m;

  k=1;

  break;

  if(k==1)

  if(i==n&

j==m)

  intge2=find(i,j,tag[i][j],ntag2);

  returnge1+ge2!

=m*n;

  intbad(inti,intj)

=m||tag[i][j]==1)

  return1;

  tag[i][j]=1;

  intb=isbad();

  tag[i][j]=0;

  returnb;

  voidgo(inti,intj,intk,intcount)

 {

  if(bad(i,j)||count<

num[i][j])

  return;

  if(count==num[i][j])

  if(r>

k)

  r=k;

  count-=num[i][j];

  go(i-1,j,k,count);

  go(i+1,j,k,count);

  go(i,j-1,k,count);

  go(i,j+1,k,count);

%d%d"

m,&

  inthalf=0;

num[i][j]);

  half+=num[i][j];

  if(half%2==0&

half>

=num[0][0]*2)

  half/=2;

  go(0,0,0,half);

  if(r==100)

  r=0;

r);

隔行变色

Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。

小明设计的样式为:

第1行蓝色,第2行白色,第3行蓝色,第4行白色,....

现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。

请你直接提交这个整数,千万不要填写任何多余的内容。

 

立方尾不变

有些数字的立方的末尾正好是该数字本身。

比如:

1,4,5,6,9,24,25,....

请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。

请提交该整数,不要填写任何多余的内容。

三羊献瑞

观察下面的加法算式:

 

祥瑞生辉

三羊献瑞

-------------------

三羊生瑞气

(如果有对齐问题,可以参看【图1.jpg】)

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

格子中输出

StringInGrid函数会在一个指定大小的格子中打印指定的字符串。

要求字符串在水平、垂直两个方向上都居中。

如果字符串太长,就截断。

如果不能恰好居中,可以稍稍偏左或者偏上一点。

下面的程序实现这个逻辑,请填写划线部分缺少的代码。

#include<

stdio.h>

string.h>

voidStringInGrid(intwidth,intheight,constchar*s)

{

inti,k;

charbuf[1000];

strcpy(buf,s);

if(strlen(s)>

width-2)buf[width-2]=0;

printf("

+"

for(i=0;

i<

width-2;

i++)printf("

-"

+\n"

for(k=1;

k<

(height-1)/2;

k++){

|"

"

|\n"

}

%*s%s%*s"

_____________________________________________);

//填空

for(k=(height-1)/2+1;

height-1;

k++){

intmain()

StringInGrid(20,6,"

abcd1234"

return0;

对于题目中数据,应该输出:

+------------------+

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2