HDOJ1005 Number Sequence

原题链接

最多49一循环,关键是找到循环起点和循环次数,循环起点不一定为f[1],所以要把数组适当开大点。

之前一直把循环起点当成1了。所以老是WA。%>_<%


附ac代码:

#include <stdio.h>
int f[100]; 

int main(){
	int a, b, n, i, j, cir;
	while(scanf("%d%d%d", &a, &b, &n), a || b || n){
		f[1] = f[2] = 1; cir = 0;
		for(i = 3; i != 100; ++i){
			f[i] = (a * f[i - 1] + b * f[i - 2]) % 7;
			for(j = 2; j != i; ++j)
				if(f[j - 1] == f[i - 1] && f[j] == f[i]){
					cir = i - j;
					break;
				}
			if(cir) break;
		}
		printf("%d\n", f[(n - j) % cir + j]);
	}
	return 0;
}


posted on 2014-02-16 12:14  长木Qiu  阅读(106)  评论(0编辑  收藏  举报