1
输入一个 yyyymmdd 格式的时间,如 20190318,计算与 20190205 相差的天数,
取绝对值,所有输入在 19000101 和 21000101 之间。
样例输入:20190208
输出:3
#include<iostream>
#include<cstring>
using namespace std;
//计算日期离20190101这一天的时间
int getdata(string s){
int m[12]={0,30,28,31,30,31,30,31,31,30,31,30};
for(int i=1;i<12;i++)
m[i]+=m[i-1];
int year=stoi(s.substr(0,4));
int month=stoi(s.substr(4,2));
int day=stoi(s.substr(6,2));
int ans=0;
ans+=(year-2019)*365;
ans+=(m[month-1]);
ans+=(day-1);
ans+=(year/4-2019/4);
ans-=(year/100-2019/100);
ans+=(year/400-2019/400);
return ans;
}
int main(){
string data;
cin>>data;
int a=getdata(data);
int b=getdata("20190205");
cout<<a-b<<endl;
return 1;
}
2
给定一个数组及其大小,数组元素在[-106,106],元素个数最多 10^6 个。
输出最大的连续子序列和,题目保证最后结果为正数。
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;i++){
cin>>nums[i];
}
long a=nums[0],b;
for(int i=1;i<n;i++){
b=max((long)nums[i],a+nums[i]);
a=b;
}
cout<<b;
return 1;
}
3
给定二叉树的节点总数 n,输出二叉树形态总数,n<= 1000
样例输入:3
输出:5
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n;
cin>>n;
vector<long long> dp(n+1);
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++){
for(int j=0,k=i-1;j<=k;j++,k--){
if(j==k)
dp[i]+=dp[j]*dp[k];
else
dp[i]+=2*dp[j]*dp[k];
}
}
cout<<dp[n];
return 1;
}
自己练习用的,不保准完全正确!!