本帖最后由 会飞的鱼 于 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;
}
成功通过!
|