7-4 疯狂星期四
思路1:蔡勒公式法(详见百度百科)
#include <iostream>
using namespace std;
int main()
{
int m,d,y;cin>>m>>d>>y;
if(m==1){
m=13;
y--;
}
if(m==2){
m=14;
y--;
}
int w= (d + 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
cout<<(w+1)%7;
return 0;
}
思路2:求两天差了多久用正负数表示:
但取模时需要注意:
(2 + x) % 7 在x < -2的时候可能会得到负数
((2 + x) % 7 + 7) % 7 避免了负数情况的出现
7-5 排列
思路:
主要就是考虑问题的角度问题~
1. 如果一次操作的区间里没有n,那这次操作一定是无意义的。
2. 最优的情况肯定是每次操作区间里只有1个n,然后每次将k-1个数转换为n。
其实就是:总共有n-1个不为n的数,每次可以转换k-1个数为n。
所以是大于(n-1)/(k-1)的最小整数。