1.求和【sum】
描述
斐波拉契数列,又称黄金分割数列,因数学家列昂纳多●斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列",指的是这样一个数列: 1、1、2、3、5、8、13.、21、34、....在数学上,斐波那契数列以如下被以递推的方法定义: F(1)=1, F(2)=1, F(n)=F (n-1)+F(n-2)(n>=3)。
斐波拉契数列的前两项分别为1.1。以后每项为前两项之和。现在输入n,要求斐波拉契数列前n项的和(1<=n<=5000)。
输入
输入只有二个数n,表示求斐波拉契数列前n项的和。
输出
输出斐波拉契数列前n项的和
输入样例 1复制
3
输出样例1复制
4
提示
对于40%的数据,n<=10
对于100%的数据,n<=5000
这一年真的np,第一题就来高精度
#include<bits/stdc++.h>
using namespace std;
string wc(string a,string b){//高精度加高精度
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());//区赛不知道给不给用
int s=0;
string ans;
for(int i=0;i<max(a.size(),b.size());i++){
if(i<a.size()){
s+=a[i]-48;
}
if(i<b.size()){
s+=b[i]-48;
}
ans=char(s%10+48)+ans;
s/=10;
}
if(s!=0){
ans='1'+ans;
}
return ans;
}
int main(){
int n;
scanf("%d",&n);
if(n==1||n==2){
printf("%d",n);
return 0;
}
string f[n+1],ans="2";
f[1]="1";
f[2]="1";
for(int i=3;i<=n;i++){
f[i]=wc(f[i-1],f[i-2]);
f[i]=f[i-1]+f[1-2];
ans=wc(ans,f[i]);
}
cout<<ans;
return 0;
}
2.骑车还是走路【bike】
描述
菲菲的家住在大学校园里。在大学校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等。这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒走3.0米。 请判断走不同的距离去办事,是骑车快还是走路快。
输入
输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。
输出
输出一行,如果骑车快,首先输出"Bike", 然后输出骑车比走路快的时间,单位为秒:
如果走路快,首先输出"Walk",然后输出走路比骑车快的时间,单位为秒;
如果一样快,输出一行"All"。(时间四舍五入精确到0.1秒)
输入样例 1复制
120
输出样例1复制
Bike 10.0
提示
一次办事需要行走的距离不超过5000米。
第二题比第一题阳间:
#include<bits/stdc++.h>
using namespace std;
int main(){
int s;
double bike,walk;
cin>>s;
bike=s/3.0+50;
walk=s/1.2;
if(bike==walk){
cout<<"All";
}else if(bike>walk){
cout<<"Walk"<<" ";
printf("%.1f",bike-walk);
}else{
cout<<"Bike"<<" ";
printf("%.1f",walk-bike);
}
return 0;
}
简单的计算,比高精度简单。
3.菲菲的月历【moncal】
描述
虽然已经上学好几年,但是菲菲还是想着“下一次放假是什么时候? "之类的问题,因此,菲菲对月历表非常关注,她总是想着看着“什么时候又放假呢? ",这不,才学习信息学不到一个学期的菲菲就想着只要给定年和月,就能打印出当月的月历表。
输入
输入为一行两个整数,第一个整数是年份year (1900<=year<=2099) , 第二个整数是月份month (1<=month<=12) ,中间用单个空格隔开。
输出
输出为月历表。月历表第一行为星期表头, 如下所示:
Sun Mon Tue Wed Thu Fri Sat
其余各行依次是当月各天的日期,从1月开始到31日(30日或28日) 。
日期数字应与星期表头右对齐,即各位数与星期表头相应缩写的最后一个字母对齐。日期中间用空格分隔出空白。
输入样例 1复制
2019 10
输出样例1复制
Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
提示
1900年1月1日是星期一
#include<bits/stdc++.h>
using namespace std;//最逆天的一题
int nian,yue,ts=0,i,day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//打表记录每个月有多少天
string kong[8]={""," "," "," "," "," "," ",""};//打表解决最大难题:格式
int cnt[8]={0,1,2,3,4,5,6,0};
int main(){
cin>>nian>>yue;
for(i=1900;i<nian;i++){
if(i%400==0||(i%100!=0&&i%4==0)){
ts+=366;
}else{
ts+=365;
}
}
if(nian%400==0||(nian%100!=0&&nian%4==0)){
day[2]=29;//处理闰年
}
for(i=1;i<yue;i++){
ts+=day[i];
}
ts=ts%7+1;//计算y年m月d日是星期几
cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;
cout<<kong[ts];
int num=cnt[ts];
for(i=1;i<=day[yue];i++){
if(i<10){
cout<<" "<<i;//这题最恶心的是格式,我这题做了二十几遍就为了格式
}else{
cout<<" "<<i;
}
num++;
if(num%7==0){
cout<<endl;
}else{
cout<<" ";
}
}
return 0;
}
4.机器人行走【robot】
描述
近年来,市面上的儿童机器人越来越多,会唱歌、讲故事、人机对话是这些儿童机器人的标配,现在越来越多的机器人已经能在人类的指令下行走、跳舞。小菲菲最近拿到了-个新的新型智能机器人,菲菲的智能机器人可以按照输入的命令进行移动,命令包含E'、'S'、 "W、 'N'四种, 分别对应四个不同的方向,依次为东、南、西、北。执行某个命令时,它会向着对应方向移动一个单位。作为新型机器人,自然不会只单单执行一个命令, 它可以执行命令串。对于输入的命令串,每一秒都会按照命令行动一次。而执行完命令串最后一个命令后,会自动从头开始循环。在0时刻时菲菲将她的机器人放置在了(0,0) 的位置,并且输入了命令串。她想知道T秒后她的机器人所在的位置坐标。
输入
第1行: 一个字符串,表示菲菲输入的命令串,保证至少有1个命令;
第2行: 一个正整数T
输出
第1行:两个整数,表示T秒时,菲菲机器人的坐标。
输入样例 1复制
NSWWNSNEEWN 12
输出样例1复制
-1 3
提示
对于60%的数据: T<=500000且命令串长度<=5000
对于100%的数据: T<=2000000000且命令串长度<=5000
向东移动,坐标改变改变为(X+1, Y) ;向南移动,坐标改变改变为(X, Y-1) ;
向西移动,坐标改变改变为(X-1, Y) ;向北移动,坐标改变改变为(X, Y+1).
这题你看T的范围就知道必须优化算法
TLE代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
string co;
int t,i;
cin>>co>>t;
int x=0,y=0;
for(i=0;i<t;i++){
if(co[i%co.size()]=='E'){
x+=1;
}else if(co[i%co.size()]=='S'){
y-=1;
}else if(co[i%co.size()]=='W'){
x-=1;
}else{
y+=1;
}
}
cout<<x<<' '<< y;
return 0;
}
时间复杂度O(T),这题t的范围<=2000000000必定超时
优化算法:
#include<bits/stdc++.h>
using namespace std;
char s[5000];
long long t,ss,k,xx,yy,x,y;
int main(){
cin>>(s+1);
ss=strlen(s+1);
cin>>t;
k=t/ss;
t%=ss;
for(int i=1;i<=ss;i++){
if(s[i]=='N'){
y++;
}
if(s[i]=='S'){
y--;
}
if(s[i]=='E'){
x++;
}
if(s[i]=='W'){
x--;
}
}
xx=x*k;
yy=y*k;
for(int i=1;i<=t;i++){
if(s[i]=='N'){
yy++;
}
if(s[i]=='S'){
yy--;
}
if(s[i]=='E'){
xx++;
}
if(s[i]=='W'){
xx--;
}
}
cout<<xx<<" "<<yy;
return 0;
}
时间复杂度O(t%ss),极大缩减了时间复杂度。