目录
第一题-分解因数
思路:
有两种情况,当输入的是素数时,那么此素数只有1和它本身,当输入的不是素数时,遍历寻找此数的素数,当遇到素数时,存起来并且将处理n
// write your code here cpp
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
void git_factor(int n, vector<int>& arr)
{
//每次调用前要将容器清空
arr.clear();
for(int i = 2; i <= sqrt(n); ++i)
{
//遇到一个素数就将此数,存起来
while(n%i == 0)
{
arr.push_back(i);
n = n/i;
}
}
//处理只有1和本身的素数
if(n > 1)
{
arr.push_back(n);
}
}
int main ()
{
int n;
vector<int> arr;
while(cin>>n)
{
git_factor(n, arr);
printf("%d = ", n);
for(int i = 0; i < arr.size(); ++i)
{
printf("%d",arr[i]);
if(i < arr.size()-1)
printf(" * ");
}
printf("\n");
}
return 0;
}
第二题-美国节日
思路:
闰年 = (year%100 != 0 && year%4 == 0 )||(year%400 == 0)
总结:
// write your code here cpp
#include<iostream>
using namespace std;
//判断闰年
bool Isleepyear(int year)
{
return (year%400 == 0)||((year%100!=0)&&(year%4 == 0));
}
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//计算今年过了多少天
int ndays(int year, int month, int day)
{
int sum = day;
for(int i = 1; i <= month-1; ++i)
{
sum += days[i];
}
//如果是闰年并且超过2月的话,会多一天
if(month > 2 && Isleepyear(year))
++sum;
return sum;
}
//从基准日期到现在过了多少天
//MOD7
int dif(int year, int month, int day)
{
return (year-1)+(year-1)/4-(year-1)/100 + (year-1)/400+ndays(year, month, day);
}
//计算今天周几
int week(int year, int month, int day)
{
int week = dif(year, month, day)%7;
if(week == 0) week = 7;
return week;
}
//已知当月一日是星期w,求出第n个星期e
int m1(int w, int n, int e)
{
return 1+(n-1)*7 + (7-w+e)%7;
}
//一直6月1日是星期w,怎么找到五月的最后一个星期一
int m2(int w)
{
int tmp = (w == 1 ? 7 : w-1);
return 32-tmp;
}
//* 1月1日:元旦
void new_year_day(int year)
{
printf("%d-01-01\n",year);
}
//* 1月的第三个星期一:马丁·路德·金纪念日
void martin_luther_king_day(int year)
{
int w = week(year,1,1);
printf("%d-01-%d\n",year, m1(w,3,1));
}
//* 2月的第三个星期一:总统节
void president_day(int year)
{
int w = week(year, 2, 1);
printf("%d-02-%02d\n", year, m1(w, 3, 1));
}
//* 5月的最后一个星期一:阵亡将士纪念日
void memorial_day(int year)
{
int w = week(year, 6, 1);
printf("%d-05-%02d\n", year, m2(w));
}
//* 7月4日:美国国庆
void independence_day(int year)
{
printf("%d-07-04\n",year);
}
//* 9月的第一个星期一:劳动节
void labor_day(int year)
{
int w = week(year, 9, 1);
printf("%d-09-%02d\n",year, m1(w, 1, 1));
}
//* 11月的第四个星期四:感恩节
void thanks_giving_day(int year)
{
int w = week(year, 11, 1);
printf("%d-11-%02d\n",year, m1(w, 4,4));
}
//* 12月25日:圣诞节
void christmas(int year)
{
printf("%d-12-25\n",year);
}
int main ()
{
int year;
while(cin>>year)
{
new_year_day(year);
martin_luther_king_day(year);
president_day(year);
memorial_day(year);
independence_day(year);
labor_day(year);
thanks_giving_day(year);
christmas(year);
cout<<endl;
}
return 0;
}