学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

1246

积分

6

好友

46

主题
发表于 2019-3-6 00:18:06 | 查看: 5744| 回复: 0
本帖最后由 会飞的鱼 于 2019-4-10 13:50 编辑

此篇写给想要提高一下C/C++思维能力的everyone,感觉这种题都挺巧妙。前面很水,可以直接看后面。
{:3_52:}{:3_52:}{:3_52:}
1、蓝桥试题集
53085c7e9fa882789.png
971875c7e9fac9b97c.png
741015c7e9fb0bc29f.png
310745c7e9fb45bf66.png
99845c7e9fb83bb60.png
323735c7e9fbbe8276.png
解题代码如下:
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    cout<<a+b;
    return 0;
}


2.蓝桥杯试题集

847415c7e9fe909ad6.png

本题源代码:
#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循环进行累加,因为时间复杂度太高,会超时,所以我们采用求和公式进行计算。
369445c7ea02126d3e.png

第一次40分,用的double型,第二次100分,用的long long int型。

3.蓝桥杯试题集
550125c7ea03f315a6.png
本题源代码:
#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.蓝桥杯试题集
296455c7ea0781921c.png
思路:采用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;
}
860535c7ea0a85cfad.png
提交后发现只通过了一部分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.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
已有 1 人评分荣耀 理由
xuenixiang + 2 牛牛~

总评分: 荣耀 + 2   查看全部评分

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-11-22 02:56 , Processed in 0.139231 second(s), 43 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表