周日做了浙江ACM省赛一个有关模运算的题。
It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days?
Input
There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:
There is only one line containing one integer N (1 <= N <= 1000000000).
Output
For each test case, output one string indicating the day of week.
Sample Input
2 1 2
Sample Output
Sunday Thursday
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3785
拿到这个题我就向取模上走了!
然后我就开始找规律,我是想1到n的n次方 1 ,2的2次方,3的3次方,4的4次方,5的5次方,6的6次方,7的7次方(因为要与7取模,所以为0的7次方),8的8次方(等于1的8次方)以此类推。第一个2的2次方和第二个2的9次方(也就是9的9次方)这样中间差 2的7次方,每个数都是这样。在下文中我用a记录了1-7的7次方%7的余数,
至于sum2,sum3 等这些是我找的规律,就是这些数一个循环 。 代码很简单。
#include<iostream>
#include<stdio.h>
using namespace std;
int a[8]={0,1,4,6,4,3,1,0};
int sum2[4]={0,4,5,0};
int sum3[7]={0,6,3,1,2,5,0};
int sum4[4]={0,4,6,0};
int sum5[7]={0,3,4,2,6,5,0};
int sum6[3]={0,1,0};
char week[7][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
int main()
{
int cases ;
cin>>cases;
while(cases--)
{
long n;
cin>>n;
long period=n/7;//周期数
int re =n%7;//出去周期后还剩几天
int sum =0;
long sum22=0,sum33=0,sum44=0,sum55=0,sum66=0;
if(re>0)
{
sum =(period+1)%7;
re--;
}
else sum=period%7;
if(re>0)
{
sum22=sum2[(period+1)%3];//%后面的当前nn对应的周期数
re--;
}
else sum22=sum2[(period)%3];
if(re)
{
sum33 =sum3[(period+1)%6];
re--;
}
else sum33 =sum3[period%6];
if(re)
{
sum44 = sum4[(period+1)%3];
re--;
}
else sum44 = sum4[period%3];
if(re)
{
sum55 = sum5[(period+1)%6];
re--;
}
else sum55 = sum5[period%6];
if(re)
{
sum66 = sum6[(period+1)%2];
re--;
}
else sum66 = sum6[period%2];
sum+=sum22+sum33+sum44+sum55+sum66;
printf("%s\n",week[sum%7]);
}
}
这是我的想法,可能有点费劲,也没有上网看看大神解题报告。
可能是让我做复杂了。
好了!本来想写总结取模的运算呢!没时间了。
明天再来写取模总结。
好了!
感谢自己坚持!