杭电1005题

//思路:使用周期实现,周期的开始不一定从头开始
#include <iostream>
using namespace std;
int main()
{
 int a,b;
 long n;
 while(cin>>a>>b>>n && (a+b+n)!=0)
 {
  int result[200] = {0,1,1};
  if(n<3)
  {
   cout<<1<<endl;
  }
  else
  {
   for(int i = 3;i<n+1;i++)
   {
    //使用布尔变量判断是否出现了周期
    bool is_time = false;
    result[i] = (a*result[i-1]+b*result[i-2])%7;
    for(int j = 1;j<i-1;j++)
    {
     //判断是否出现了周期
     if(result[j] == result[i-1] && result[j+1] == result[i])
     {
      is_time = true;
      int t = i-j-1;
         n = (n-j) % t + j;
      break;
     }
    }
    if(is_time)
    {
     break;
    }
   }
   cout<<result[n]<<endl;
  }
 }
 return 0;
}

你可能感兴趣的:(杭电)