蓝桥杯校赛题目以及解析

来源:互联网 发布:手机淘宝首页怎么装修 编辑:程序博客网 时间:2024/05/29 14:22

题目一

输入一个字符串,求它包含多少个单词。单词间以一个或者多个空格分开。

第一个单词前,最后一个单词后也可能有0到多个空格。

比如:" abc    xyz" 包含两个单词,"ab   c  xyz    "  包含3个单词。


如下的程序解决了这个问题,请填写划线部分缺失的代码。


注意:只填写划线部分的代码,不要填写任何多余的内容。比如已经存在的小括号,注释或说明文字等。


int get_word_num(char* buf)

{

         intn = 0;  

         inttag = 1;

         char*p = buf;

        

         for(;*p!=0&& *p!=13 && *p!=10;p++)//个人感觉 *p!=13 && *p!=10,这里有点多余,

//好像字符数组里面不能保存换行和回车符吧,所以也就不需要判断字符是否为换行和回车符了。

{

                   if(*p=='' && tag==0) tag=1;

                   if(_____________________ ) //填空

 { 

n++;

tag=0;

 } 

         }

         returnn;

} 

int main()

{

         charbuf[1000];

         fgets(buf,1000,stdin);

        

         printf("%d\n",get_word_num(buf));

         return0;

}

解析:横线部分填:((*p>='a' && *p<='z')||(*p>='A' && *p<='Z'))&&(tag==1);


题目二

 

1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。 

它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。

但是,它发散的很慢:

前1项和达到 1.0

前4项和才超过 2.0

前83项的和才超过 5.0

那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?

请填写这个整数。


注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。


答案:1835421;

代码如下:

#include<stdio.h>
int main()
{
double  i=1.0;
double sum=0.0;
int count=0;
for(;sum<=15.0;i++)
{
sum=sum+(1.0/i);


count++;
}
printf("%d\n",count);
return 0;


题目三

如果x的x次幂结果为10,你能计算出x的近似值吗?

显然,这个值是介于2和3之间的一个数字。

请把x的值计算到小数后6位(四舍五入),并填写这个小数值。

注意:只填写一个小数,不要写任何多余的符号或说明。


答案:2.506184

完整代码如下:

#include <cstdio>
#include <cmath>
int main()
 {
double x=2.4;
for(;x<3;x+=0.00000001)
{
if(fabs((pow(x,x)-10.0))<0.000001)
{
printf("%.8lf\n",x);
}
}
return 0;
}


题目四

合数,指自然数中除了能被1和本身整除外,还能被其他的数整除(不包括0,1)的数。与之相对的是质数(因数只有1和它本身,如2,3,5,7,11,13等等,也称素数)。

 

 

已知n=99999999是一个合数,那么能被他整除的数有几个(1和本身除外):

合数n=9999999,能被他整除的数又有几个(1和本身除外):

代码如下:可以自己修改程序中n的值。

#include<stdio.h>
int main()
{
long long n=9999999;
int count=0;
for(int i=2;i<n;i++)
{
if(n%i==0)
{
count++;
printf("%d  ",i);
}

printf("%d\n",count);
return 0;


题目五

从键盘上输入一个整数n,要求计算n+nn+nnn+nnnn+nnnnn+......(共n项)的和,

例如n=5,

则计算5+55+555+5555+55555的结果

【数据格式】

输入一个整数 n (0<n<10) 。

要求输出一个整数,计算结果。

例如,输入:

5

程序应该输出:

61725

再例如,输入:

3

程序应该输出:

369

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。

 

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

完整代码如下:

#include<stdio.h>
int main()
{
int i=1,n;
    long long sum1=0.0,sum2=0.0;

scanf("%d",&n);

for(sum2=sum1=n;i<n;i++)
{
sum1=sum1*10+n; 
sum2+=sum1;

printf("%lld\n",sum2);


return 0;

读者可以自行运行结果。

题目六

  勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形。

  已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数。

  求满足这个条件的不同直角三角形的个数。

【数据格式】

输入一个整数 n (0<n<10000000) 表示直角三角形斜边的长度。

要求输出一个整数,表示满足条件的直角三角形个数。

例如,输入:

5

程序应该输出:

1

再例如,输入:

100

程序应该输出:

2

再例如,输入:

3

程序应该输出:

0

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

完整代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,c2,b2,count=0;
scanf("%d",&c);
c2=c*c;
for(a=1;a<c/sqrt(2);a++) 
{
b=sqrt(c2-a*a);
if((a*a+b*b)==c2)
{
count++;
}
}
printf("%d\n",count);

return 0;

题目七

输出一个数字n,计算(0 - n)之间所有数字的全排列。

【数据格式】

输入一个整数 n (0<n<10) 。

要求输出(1 - n)之间所有数字的全排列,中间逗号分开。

 

例如,输入:

3

程序应该输出:

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

 

再例如,输入:

2

程序应该输出:

1,2

2,1

 

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

 

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。

 第七题还真没有想出什么好的方法,先把博客发表了后面再补上吧。

 注:题目文档和源程序已经上传到了CSDN的下载页,下载地址在下面评论中。需要的同志可以自行下载。


 

3 0
原创粉丝点击