Gu-f 发表于 2019-3-6 00:18:06

蓝桥部分练习题跳坑

本帖最后由 会飞的鱼 于 2019-4-10 13:50 编辑

此篇写给想要提高一下C/C++思维能力的everyone,感觉这种题都挺巧妙。前面很水,可以直接看后面。
{:3_52:}{:3_52:}{:3_52:}
1、蓝桥试题集






解题代码如下:
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
}


2.蓝桥杯试题集


本题源代码:
#include <iostream>
using namespace std;
int main()
{
    long long int input;
    cin>>input;
    long long int sum;
    sum=input+((input*(input-1))/2);
    cout<<sum;
    return 0;
}


此题容易忽略的地方类型一定要是long long int 型,double型只能通过40%数据,注意题目的规模。同时此题不能仅仅使用for循环进行累加,因为时间复杂度太高,会超时,所以我们采用求和公式进行计算。
第一次40分,用的double型,第二次100分,用的long long int型。
3.蓝桥杯试题集本题源代码:#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
    double s;
    double r;
    cin>>r;
    s=atan(1.0)*4*r*r;
    printf("%.7lf",s);
    return 0;
}

此题目需要注意的地方:本题的输出精度较高,所以需要格式化输出printf(“%7lf”,s),即保留7位有效数字,
再一个就是Π的取值精度需要很高,仅仅是常记忆的3.1415926精度不够,需要精度到达3.14159265358979323,但是这个数据一般我们没有记忆过去,所以现在可以记过去,或者直接用Π的公式进行计算,即PI=atan(1.0)*4,这个公式容易记忆。使用这个公式记得包含头文件math.h
4.蓝桥杯试题集思路:采用while循环进行依次计算f3本题初步源代码;#include<iostream>
using namespace std;
int main()
{
    long long int f1=1,f2=1,f3,input;
    cin>>input;
    if(input==1||input==2)
    {
      cout<<(1%10007);
      return 0;
    }
    else
    {
      while(input!=2)
      {
            f3=f1+f2;
            f1=f2;
            f2=f3;
            input--;
      }
      cout<<f3%10007;
    }
    return 0;
}
提交后发现只通过了一部分40%,拿到了40分;肯定是数太大long long int 型也存不下了,考虑到用浮点型,但是浮点型没办法取余。之后看到题目里有说明提示,所以优化算法如下#include<iostream>
using namespace std;
int main()
{
    long long int f1=1,f2=1,f3,input;
    cin>>input;
    if(input==1||input==2)
    {
      cout<<(1%10007);
      return 0;
    }
    else
    {
      while(input!=2)
      {
            f3=(f1+f2)%10007;
            f1=f2;
            f2=f3;
            input--;
      }
      cout<<f3;
    }
    return 0;
}
成功通过!

页: [1]
查看完整版本: 蓝桥部分练习题跳坑