2014第五届蓝桥杯C-C++本科B组试题及答案

萌到你眼炸
881次浏览
2021年02月12日 21:38
最佳经验
本文由作者推荐

-

2021年2月12日发(作者:行走的鸡毛掸子)


2014


第五届蓝桥杯


C/C++


本科


B


组试题及答案



1.


标题:啤酒和饮料




啤酒每罐


2.3


元,饮料每罐


1.9


元。小明买了若干啤酒和饮料, 一共花了


82.3


元。




我们还知道他买的啤酒比饮料的数量少,请你计算他买 了几罐啤酒。




注意:答案是一个整数。请通过浏览器提交答案。



解答:



#include



int



main()



{



int



x,y;



double



m=0;



for(x=0,y=42;x<35 || x>y;)



{



y = (int)(82.3-2.3*x)/1.9;



m= 2.3*x+1.9*y;



if(m==82.3)



break;



x = x+1;



y = y-2;



}



printf(



return



0;



}




2.


标题:切面条




一根高筋拉面,中间切一刀,可以得到


2


根面条。




如果先对折


1


次,中间切一刀,可以得到


3


根面条。




如果连续对折


2


次,中间切一刀,可以 得到


5


根面条。




那么,连续对折


10


次,中间切一刀,会得到多少面条呢?



答案是 个整数,请通过浏览器提交答案。不要填写任何多余的内容。



解答:



#include



#include



int



main()



{




printf



(



pow



( 2.0 ,10.0 ) + 1);




return



0;



}





3


.标题:李白打酒




话说大诗人李白,一生好饮。幸好他从不开车。




一天,他提着酒壶,从家里出来,酒壶中有酒


2


斗。他边走边唱:




无事街上走,提壶去打酒。




逢店加一倍,遇花喝一斗。




这一路上,他一共遇到店


5


次,遇到花


10


次,已知最后一次遇到的是花,他正好把酒喝光

< p>
了。




请你计 算李白遇到店和花的次序,可以把遇店记为


a


,遇花记为


b


。则:


babaabbabbabbb


b


就是合理的次序。像这样的答案一共有多少呢?请你计算出所有 可能方案的个数(包含题目


给出的)。




注意:通过浏览器提交答案。答案是个整数。不要书写 任何多余的内容。



解答:



#include



int



sum=0;



int



f(int



a,int



b,int



c){






if(a>0)








f(a-1,b,c*2);






if(b>0)








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






if(a==0&&b==0&&c==1)








sum=sum+1;







return



sum;



}



int



main(){







f(5,9,2);







printf(



}








4.


标题:史丰收速算




史丰收速算法的革命性贡献是:从高位算起,预测进位 。不需要九九表,


彻底颠覆了传统手



!



速算的核心基础是:


1< /p>


位数乘以多位数的乘法。




其中,乘以


7


是最复杂的,就以它为例。< /p>




因为,


1/7


是个循环小数:


0.142857...


,如果多位数超过


142857...


,就要进


1



同理,


2/7, 3/7, ... 6/7


也都是类似的循环小数,多位数超过


n/7


,就要进


n



下面的程序模拟了史丰收速算法中乘以


7


的运算 过程。




乘以


7


的个位规律是:偶数乘以< /p>


2


,奇数乘以


2


再加


5


,都只取个位。




乘以


7


的进位规律是:










142857...



1,



285714...



2,



428571...



3,



571428...



4,



714285...



5,



857142...



6



请分析程序流程,填写划线部分缺少的代码。



2401


//


计算个位



int ge_wei(int a)


{






}



//


计算进位



int jin_wei(char* p)


{


if(a % 2 == 0)



else



return (a * 2 + 5) % 10;



return (a * 2) % 10;





























}



char* level[] = {








};



char buf[7];


buf[6] = '0';


strncpy(buf,p,6);



int i;


for(i=5; i>=0; i--){











}



return 0;


int r = strcmp(level[i], buf);


if(r<0) return i+1;


while(r==0){







}


p += 6;


strncpy(buf,p,6);


r = strcmp(level[i], buf);


if(r<0) return i+1;


______________________________; //


填空




< /p>






//


多位数乘以


7


void f(char* s)


{













}


int main()


{





}




注意 :


通过浏览器提交答案。


只填写缺少的内容,

< br>不要填写任何多余的内容


(例如:


说明性文字)



f(


f(


return 0;




int head = jin_wei(s);


if(head > 0) printf(



char* p = s;


while(*p){






}



printf(


int a = (*p-'0');


int x = (ge_wei(a) + jin_wei(p+1)) % 10;


printf(


p++;



解答:




if(r>0)return



i;





5.


标题:打印图形




小明在


X

星球的城堡中发现了如下图形和文字:



rank=3


*


* *


* *


* * * *


rank=5


*


* *


* *


* * * *


* *


* * * *


* * * *


* * * * * * * *


* *


* * * *


* * * *


* * * * * * * *


* * * *


* * * * * * * *


* * * * * * * *


* * * * * * * * * * * * * * * *


ran=6


*


* *


* *


* * * *


* *


* * * *


* * * *


* * * * * * * *


* *


* * * *


* * * *


* * * * * * * *


* * * *


* * * * * * * *


* * * * * * * *


* * * * * * * * * * * * * * * *


* *


* * * *


* * * *


* * * * * * * *


* * * *


* * * * * * * *


* * * * * * * *


* * * * * * * * * * * * * * * *


* * * *


* * * * * * * *


* * * * * * * *


* * * * * * * * * * * * * * * *


* * * * * * * *


* * * * * * * * * * * * * * * *


* * * * * * * * * * * * * * * *


* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *





小明开动脑筋,编写了如下的程序,实现该图形的打印。



#define N 70


void f(char a[][N], int rank, int row, int col)


{












}


int main()


{













}



请仔细分析程序逻辑,填写缺失代码部分。




通过浏览器提交答案。


注意不 要填写题目中已有的代码。


也不要写任何多余内容


(比如说明< /p>


性的文字)



char a[N][N];


int i,j;


for(i=0;i


for(j=0;j






}



return 0;


f(a,6,0,0);


for(i=0; i


for(j=0; j


printf(


if(rank==1){




}


int w = 1;


int i;


for(i=0; i


____________________________________________;


f(a, rank-1, row+w/2, col);


f(a, rank-1, row+w/2, col+w);


a[row][col] = '*';


return;


解答:


-


-


-


-


-


-


-


-