2015蓝桥杯b组

如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?

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

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

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define eps 1e-7
 
using namespace std;
 
int main()
{
    double aim = 10.0;
    double x;
    double L=2.0, R=3.0;
    //二分枚举
    while(L-R < (-eps))
    {
        double mid=(L+R)/2;
        if( pow(mid,mid) > aim ){
            R=mid;
        }else{
            L=mid;
        }
    }
    printf("%lf\n", pow(L, L)); //最后得到的是9.999999
 
    printf("%lf  %lf\n", L, R); //L=R=2.506184
 
    return 0;
}

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

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

但是,它发散的很慢:

前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0

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

请填写这个整数。

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


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
 
using namespace std;
 
 
int main()
{
    double ans=0;
    double i=1.0;
    while(ans < 15.0){
        ans+=(1.0/i);
        i+=1.0;
    }
    printf("%lf %lf\n", ans, i);
    return 0;
}

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

第一个单词前,最后一个单词后也可能有0到多个空格。
比如:" abc xyz" 包含两个单词,"ab c xyz " 包含3个单词。

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

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
 
using namespace std;
 
int get_word_num(char* buf)
{
    int n = 0;
    int tag = 1;
    char* p = buf;
 
    for( ;*p!=0&&*p!=13 && *p!=10; p++)
       {
        if(*p==' '&&tag==0) tag=1;
        if( *p!=' ' && tag==1  ){
             n++; tag=0;
                 }
        }
 
    return n;
}
 
int main()
{
    char buf[1000];
    fgets(buf, 1000, stdin);
 
    printf("%d\n", get_word_num(buf));
    return 0;
}

三羊献瑞(9分)

观察下面的加法算式:


          祥 瑞 生 辉

      +   三 羊 献 瑞 

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

       三 羊 生 瑞 气


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

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

  1085

手算,突破口是三一定等于1,继续往下推即可。

两条非常重要的结论

1,因为是加法算式三是进位出来的 所以是三是1 
2,因为三是1且三加祥能进位,只有1+9能进位,所以祥是9

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

bool check(int *a){
    return ((9*1000+a[0]*100+a[1]*10+a[2])+(1000+a[3]*100+a[4]*10+a[0])==(10000+a[3]*1000+a[1]*100+a[0]*10+a[5]));
}
int main(){
    int a[]={0,2,3,4,5,6,7,8};
    //int tem = 8*7*6*5*4*3*2*1;
    while(1){
        if(check(a)){
            printf("%d\n",(1000+a[3]*100+a[4]*10+a[0]));
            break;
        }
        next_permutation(a,a+8);
    }
    return 0;
}

加法变乘法

我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。

请你寻找另外一个可能的答案,
并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。

注意:需要你提交的是一个整数,不要填写任何多余的内容。


思路:

1.  说思路其实也没什么思路,按照正常的解法一步一步的写出程序来就OK了。

2.  将1+2+3+ ... + 49其中的两个“+”变成“*”,用双重循环来遍历所有可能出现的结果。

3.  外层循环的变量i代表前一个“*”,内层循环中的j代表后一个“*”,依次遍历。

4.  用变量tmp来保存将程序中的前一个“+”改变成“*”过后的结果。代码为tmp = res = sum-(i+(i-1))+i*(i-1) ,读者需要仔细理解这句代码。

5.  用变量res来保存将程序中的后一个“+”改变成“*”过后的结果。代码为res = tmp-(j+(j-1))+j*(j-1) 。

6.  然后变量res判断的值是否为2015。如果是,则输出i和对于j的值。(题目中只要求求出前一个“*”所在的位置,即i的值)。


#include <stdio.h>    
int main()    
{    
    int sum = 1225;  
    int tmp=0;  //临时变量,在程序中保存中间结果   
    int res=0;  //用来保存将“+”改变成“*”号后的结果   
    for(int i=2; i<=47; ++i)  
     {    
        tmp = res = sum-(i+(i-1))+i*(i-1);    
          
        for(int j=i+2; j<=49; ++j)   
        {    
            res = tmp-(j+(j-1))+j*(j-1);    
            if(res == 2015)  
            {    
                printf("(i= %d ,j= %d)\n", i-1,j-1);    
            }      
        }    
    }    
}  

题目:

小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

思路:

这道题的主要思路就是暴力循环,依题意“如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种”,主要要考虑的问题是不考虑花色,只考虑点数,那么四个人就是每人13张牌,也就是说,我们把扑克牌按点数平均分成13份(每份4张同样点数的牌),每份中有若干张牌(最小为0张,最大为4张)被发到小明手里,发给小明的这13份不同点数的牌的数量加起来一共有13张。这就是这道题按照暴力循环解答的思路。


#include<iostream>
using namespace std;
int main()
{
	int a[13]={0};
	int result=0,count=0;
	for(a[0]=0;a[0]<=4;a[0]++)
	{
		for(a[1]=0;a[1]<=4;a[1]++)
		{
			for(a[2]=0;a[2]<=4;a[2]++)
			{
				for(a[3]=0;a[3]<=4;a[3]++)
				{
					for(a[4]=0;a[4]<=4;a[4]++)
					{
						for(a[5]=0;a[5]<=4;a[5]++)
						{
							for(a[6]=0;a[6]<=4;a[6]++)
							{
								for(a[7]=0;a[7]<=4;a[7]++)
								{
									for(a[8]=0;a[8]<=4;a[8]++)
									{
										for(a[9]=0;a[9]<=4;a[9]++)
										{
											for(a[10]=0;a[10]<=4;a[10]++)
											{
												for(a[11]=0;a[11]<=4;a[11]++)
												{
													for(a[12]=0;a[12]<=4;a[12]++)
													{
														if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13)
														{
															count++;
															result=count;
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	cout<<count<<endl;
	return 0; 
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值