当前位置: 代码迷 >> 综合 >> HDU 1005 Number Sequence(循环节) *
  详细解决方案

HDU 1005 Number Sequence(循环节) *

热度:118   发布时间:2023-09-23 03:44:17.0

思路来自:http://blog.sina.com.cn/s/blog_a16dd6d101014pjy.html

因为首先,任意一个数mod7结果为0到6这7个值,两个数就有7*7种组合

所以只要计算50此肯定会有个循环

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <cmath>
#include <sstream>
#include <vector>
using namespace std;
#define REP(i,a,b) for(int i=a;i<(int)b;i++)
#define REPD(i,a,b) for(int i=a;i>=(int)b;i--)int f[50+5];
int main()
{int a, b;int n, i;while(1){memset(f, 0, sizeof(f));scanf("%d%d%d", &a, &b, &n);if(a==0 && b==0 && n == 0) break;f[0] = f[1] = 1;if(n == 1 || n ==2 ){printf("1\n");continue;}for(i = 2; i<50; i++){f[i] = (a * f[i-1] + b * f[i-2])% 7;if(f[i-1] == 1 && f[i-2] == 1 && i != 2  )  break;    }printf("%d\n",f[(n-1)%(i-2)]);}return 0;
}



  相关解决方案