方法一
#include<stdio.h>
int
main
()
{
int
a
,
b
,
n
;
while
(
scanf
(
"%d %d %d"
,&
a
,&
b
,&
n
)!=
EOF
&&(
a
+
b
+
n
)!=
0
)
{
int
f1
=
1
,
f2
=
1
,
f3
=
1
,
t
,
r
[
8
][
8
]={
0
},
i
,
flag
=
0
,
x
;
for
(
i
=
3
;
i
<=
n
;
i
++)
{
f3
=(
a
*
f2
+
b
*
f1
)%
7
;
r
[
f1
][
f2
]=
i
;
f1
=
f2
;
f2
=
f3
;
if
(
r
[
f1
][
f2
]&&
flag
==
0
)
{
t
=
i
-
r
[
f1
][
f2
]+
1
;
i
=
r
[
f1
][
f2
]-
3
;
n
=(
n
-
i
)%
t
+
i
;
if
(
n
==
i
)
n
=
t
+
i
;
if
(
n
==(
i
+
1
)) {
f3
=
f1
;
break
;}
if
(
n
==(
i
+
2
)) {
f3
=
f2
;
break
;}
i
+=
2
;
flag
=
1
;
}
}
printf
(
"%d\n"
,
f3
);
}
getchar
();
getchar
();
}
方法二
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,n,i;
while(1)
{
scanf("%d%d%d",&a,&b,&n);
if(a==0&&b==0&&n==0) break;
int f[1009];
f[1]=1;f[2]=1;
for(i=3;i<=1008;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
}
printf("%d\n",f[(n-1)%1008+1]);
}
return 0;
}