ACM刷题之ZOJ————What day is that day?
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 2Sample Output
Sunday ThursdayHint
A week consists of Sunday, Monday, Tuesday, Wednesday, Thursday, Friday and Saturday.
初看这题目,以为是快速幂,但看了范围后,感觉应该是规律题。
总结下做规律题的方法,尽可能的多大几组数据(要保证数据是正确的)
然后放到sublime里面找字串就好了。这题我找出的规律是294 但是网上说规律是40多
可能找的太急,找到了规律的倍数吧
下面是ac代码(里面有快速幂取模的代码)
#include<stdio.h> int qmod(int a,int b) { int r=1; while(b) { if(b&1) r=((r%7)*(a%7))%7; a=((a%7)*(a%7))%7; b>>=1; } return r; } int x[400]; int main() { int zu,c=0,n,q; long long k; for(int i=1;i<300;i++) { //if(!(i%7)) //PRintf("\n\n"); c+=qmod(i,i); x[i]=(c%7); } scanf("%d",&n); while(n--) { scanf("%lld",&k); k=k%294; if(x[k]==0) { printf("Saturday\n"); }else if(x[k]==1) { printf("Sunday\n"); }else if(x[k]==2) { printf("Monday\n"); }else if(x[k]==3) { printf("Tuesday\n"); }else if(x[k]==4) { printf("Wednesday\n"); }else if(x[k]==5) { printf("Thursday\n"); }else if(x[k]==6) { printf("Friday\n"); } } }