第六届蓝桥杯校内选拔

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

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

但是,它发散的很慢:

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

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

请填写这个整数。

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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    double sum=0;
    double a=1;
    int i=0;
    while(sum<15.0)
    {
        i++;
        a=1.0/i;
        sum+=a;
    }
    printf("%d",i);
    return 0;
}

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


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


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


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

#include<cstdio>
#include<cmath>
int main()
{
    double i;
    double x10;
    for(i=2.000000;i<3.000000;i+=0.0000001)
    {
        x10=pow(i,i);
        if(x10>=10)
            break;
    }
    printf("%lf\n",i);
    return 0;
}

今有7对数字:两个1,两个2,两个3,…两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:

17126425374635

当然,如果把它倒过来,也是符合要求的。

请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。

注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[15];
bool dfs(int n)
{
    if(n==4)
        n++;
    if(n>6)
        return true;
    for(int i=3;i<=14;i++)
    {
        if(i==7||i==9)
            continue;
        if(i+n+1<=14&&a[i]==0&&a[i+n+1]==0)
        {
            a[i]=a[i+1+n]=n;
            if(dfs(n+1))
                return true;
            a[i]=a[i+n+1]=0;//dfs(n+1)改变了其值
        }
    }
    return false;
}
int main()
{
    memset(a,0,sizeof(a));
    a[1]=7;
    a[2]=4;
    a[7]=4;
    a[9]=7;
    dfs(1);
    for(int i=1;i<=14;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}


你可能感兴趣的:(第六届蓝桥杯校内选拔)