What day is that day?

转:https://blog.csdn.net/menxiaoyuan/article/details/50451719 了解了如何去找循环节 What day is that day? 题解:

Description

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

Hint

A week consists of Sunday, Monday, Tuesday, Wednesday, Thursday, Friday and Saturday.


  1. //打表代码–找循环节   
  2. #include <iostream>  
  3. #include <cstdio>  
  4. #include <cstring>  
  5. #include <algorithm>  
  6. using namespace std;  
  7. const int maxn = 11000;  
  8. int a[maxn], b[maxn], f[maxn];   
  9. int main(){  
  10.      int t, i, j, n;  
  11.      int sum, x, cnt, ad;  
  12.      while(cin>>t){  
  13.          while(t–){  
  14.              //cin>>n;  
  15.              sum = 0;  
  16.              memset(a, 0, sizeof(a));  
  17.              memset(b, 0, sizeof(b));  
  18.              memset(f, 0, sizeof(f));  
  19.              for(n = 1; n <= 10005; n++){  
  20.                  x = 1;  
  21.                  for(i = 1; i <= n; i++){  
  22.                      x = x*n;  
  23.                      x = x%7;  //因为数会非常大,所以利用公式,取余  
  24.                  }  
  25.                   sum += x;  
  26.                   sum = sum%7;  //因为数会非常大,所以利用公式,取余  
  27.                   a[n] = sum;   //把所有结果存入a数组  
  28.              }  
  29.              cnt = 1;  
  30.              for(i = 1; i <= 10000; i++){  
  31.                  if(a[i]==1)  
  32.                      {  
  33.                          b[cnt++] = i;  //把结果为1的序号 存入b  
  34.                         f[i] = 1;  
  35.                     }  
  36.                     /*cout<<a[i]; 
  37.                     if(i%294==0) 
  38.                        cout<<endl<<endl;*/  
  39.             }  
  40.             for(i = 2; i < cnt; i++){  
  41.                 ad = b[i]-1;  //每一个 的间隔  
  42.                 for(j = 1; j <= 6; j++)  //如果照这个间隔向后推 几次,还是符合间隔的话,就找到了循环节  
  43.                 {  
  44.                     if(f[b[i]+ad*j] != 1)  
  45.                         break;  
  46.                 }  
  47.                if(j==7){  
  48.                    cout<<b[i]<<endl;  
  49.                     break;  
  50.                 }  
  51.             }  
  52.         }  
  53.     }  
  54.     return 0;  
  55. }  
//打表代码--找循环节 

}


  1. //ac代码   
  2. #include<iostream>  
  3. #include<cstdio>  
  4. #include<cstring>  
  5. using namespace std;  
  6. int e[300];  
  7. char s[10][20]={“Saturday”,“Sunday”“Monday”“Tuesday”“Wednesday”“Thursday”“Friday”};  
  8. int main(){  
  9.     int T,n,i,j,x,sum=0;  
  10.     for(i=1;i<=294;i++){  
  11.         x=1;  
  12.         for(j=1;j<=i;j++){  
  13.             x*=i;  
  14.             x%=7;  
  15.         }  
  16.         sum+=x;  
  17.         sum%=7;  
  18.         e[i]=sum;  
  19.     }  
  20.     cin >> T;  
  21.     while(T–){  
  22.         cin >> n;  
  23.         n%=294;  
  24.         if(n==0) n=294;  
  25.         cout << s[e[n]] << endl;  
  26.     }  
  27.     return 0;  
  28. }  
pre>



        </div>
            </div>

Description

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

Hint

A week consists of Sunday, Monday, Tuesday, Wednesday, Thursday, Friday and Saturday.


  1. //打表代码–找循环节   
  2. #include <iostream>  
  3. #include <cstdio>  
  4. #include <cstring>  
  5. #include <algorithm>  
  6. using namespace std;  
  7. const int maxn = 11000;  
  8. int a[maxn], b[maxn], f[maxn];   
  9. int main(){  
  10.      int t, i, j, n;  
  11.      int sum, x, cnt, ad;  
  12.      while(cin>>t){  
  13.          while(t–){  
  14.              //cin>>n;  
  15.              sum = 0;  
  16.              memset(a, 0, sizeof(a));  
  17.              memset(b, 0, sizeof(b));  
  18.              memset(f, 0, sizeof(f));  
  19.              for(n = 1; n <= 10005; n++){  
  20.                  x = 1;  
  21.                  for(i = 1; i <= n; i++){  
  22.                      x = x*n;  
  23.                      x = x%7;  //因为数会非常大,所以利用公式,取余  
  24.                  }  
  25.                   sum += x;  
  26.                   sum = sum%7;  //因为数会非常大,所以利用公式,取余  
  27.                   a[n] = sum;   //把所有结果存入a数组  
  28.              }  
  29.              cnt = 1;  
  30.              for(i = 1; i <= 10000; i++){  
  31.                  if(a[i]==1)  
  32.                      {  
  33.                          b[cnt++] = i;  //把结果为1的序号 存入b  
  34.                         f[i] = 1;  
  35.                     }  
  36.                     /*cout<<a[i]; 
  37.                     if(i%294==0) 
  38.                        cout<<endl<<endl;*/  
  39.             }  
  40.             for(i = 2; i < cnt; i++){  
  41.                 ad = b[i]-1;  //每一个 的间隔  
  42.                 for(j = 1; j <= 6; j++)  //如果照这个间隔向后推 几次,还是符合间隔的话,就找到了循环节  
  43.                 {  
  44.                     if(f[b[i]+ad*j] != 1)  
  45.                         break;  
  46.                 }  
  47.                if(j==7){  
  48.                    cout<<b[i]<<endl;  
  49.                     break;  
  50.                 }  
  51.             }  
  52.         }  
  53.     }  
  54.     return 0;  
  55. }  
//打表代码--找循环节 

}


  1. //ac代码   
  2. #include<iostream>  
  3. #include<cstdio>  
  4. #include<cstring>  
  5. using namespace std;  
  6. int e[300];  
  7. char s[10][20]={“Saturday”,“Sunday”“Monday”“Tuesday”“Wednesday”“Thursday”“Friday”};  
  8. int main(){  
  9.     int T,n,i,j,x,sum=0;  
  10.     for(i=1;i<=294;i++){  
  11.         x=1;  
  12.         for(j=1;j<=i;j++){  
  13.             x*=i;  
  14.             x%=7;  
  15.         }  
  16.         sum+=x;  
  17.         sum%=7;  
  18.         e[i]=sum;  
  19.     }  
  20.     cin >> T;  
  21.     while(T–){  
  22.         cin >> n;  
  23.         n%=294;  
  24.         if(n==0) n=294;  
  25.         cout << s[e[n]] << endl;  
  26.     }  
  27.     return 0;  
  28. }  
pre>



        </div>
            </div>

猜你喜欢

转载自blog.csdn.net/hanyanwei123/article/details/80151750