目录
第一题-淘宝网店
思路:
首先判断同一个月中天数的差异,同一年中月份的差异,不同年份差异,总共有9种情况,分开来讨论
// write your code here cpp
#include<iostream>
using namespace std;
//非闰年每月天数
int days[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//非闰年每月的收益
int mony[]={0, 62, 28, 31, 60, 31, 60, 31, 62, 60, 62, 30, 62};
//判断素数
bool Is_prime(int n)
{
if(n == 2 || n == 3 || n == 5 || n == 7 || n == 11)
return true;
return false;
}
//判断闰年
bool Is_leapyear(int year)
{
return (year%400 == 0)||((year%4 == 0)&&(year%100 != 0));
}
//day2-day1收益
int daymony(int day1, int day2, int month)
{
int sum = day2-day1+1;
if(!Is_prime(month))
sum*=2;
return sum;
}
//month2-mnoth1收益,包括month1和month2
int monthmony(int month1, int month2, int year)
{
int sum=0;
for(int i = month1; i <= month2; ++i)
{
sum+=mony[i];
if(Is_leapyear(year)&&i == 2)
++sum;
}
return sum;
}
//year2-year1收益.包括year1和year2
int yearmony(int year1, int year2)
{
int sum=0;
for(int i = year1; i <= year2; ++i)
{
sum+=monthmony(1,12,i);
}
return sum;
}
int main ()
{
int year1, month1, day1, year2, month2, day2;
while(cin>>year1>>month1>>day1>>year2>>month2>>day2)
{
int count=0;
//同年
if(year1==year2)
{
//同月
if(month1 == month2)
{
count+=daymony(day1, day2, month1);
}
//不同月份
else
{
//计算month1的当月收益
count+=daymony(day1, days[month1], month1);
//计算month2的当月收益
count+=daymony(1, day2, month2);
//计算两者的相差月份的收益
count+=monthmony(month1, month2, year1);
}
}
else
{
//不同年
//计算相差年份的收益
count+=yearmony(year1+1,year2-1);
//计算开始的头一年和结束的最后一年里,所有月份的收益
count+=monthmony(month1+1, 12, year1);
count+=monthmony(1, month2-1,year2);
//计算当月不满的收益
count+=daymony(day1, days[month1],month1);
count+=daymony(1, day2, month2);
}
cout<<count<<endl;
}
return 0;
}
第二题-斐波那契凤尾
思路:
值得注意的是,牺牲空间换取时间,首先先定义好斐波那契数并计算,然后记录斐波那契额中大于1000000的数据,当超过六位则取后六位输出,当小于六位直接输出即可
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> F(100001, 0);
F[0] = 1;
F[1] = 1;
//提前计算斐波那契数列,只保留后6位
for(int i = 2; i <= 100000; ++i){
F[i] = F[i - 2] + F[i - 1];
F[i] = F[i] % 1000000;//由于是相加,所以只要后六位不影响下一个数的结果
}
int n;
while(cin >> n){
if(n < 29){
//斐波那契数列小于6位
printf("%d\n", F[n]);
}
else{
printf("%06d\n", F[n]);
}
}
return 0;
}