1 条题解
-
0
C :
#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; }
C++ :
#include <iostream> #include <cstring> #include <cmath> using namespace std; long long f[60]; int main() { int a,b,c; while(cin>>a>>b>>c) { if(a==0 && b==0 && c==0) break; memset(f,0,sizeof(f)); int start=0,end=0,flag=0; f[1]=1; f[2]=1; for(int i=3;i<=c && flag==0;i++) { f[i]=(a*f[i-1]+b*f[i-2])%7; for(int j=2;j<i;j++) { if(f[i]==f[j] && f[i-1]==f[j-1]) { start=j; end=i; flag=1; break; } } } if(flag==1) cout<<f[start+(c-end)%(end-start)]<<endl; else cout<<f[c]<<endl; } }
Java :
import java.util.Scanner; class deal{ private final int N=60; public int[] ans=new int[N]; public int[][] flag=new int[10][10]; public deal(){} private void init() { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { flag[i][j]=-1; } } } public void solve(int A,int B,int n){ ans[0]=ans[1]=1; init(); flag[1][1]=0; int pre=1,next=2; int i; for(i=2;i<n;i++) { ans[i]=(A*ans[i-1]+B*ans[i-2])%7; if(flag[ans[i-1]][ans[i]]!=-1) { pre=flag[ans[i-1]][ans[i]]; next=i-1-pre; break; } flag[ans[i-1]][ans[i]]=i-1; } n--; if(n<i)System.out.println(ans[n]); else { System.out.println(ans[pre+(n-pre)%next]); } } } public class Main{ public static void main(String...strings) { Scanner in = new Scanner(System.in); int A,B,n; deal h = new deal(); while(in.hasNext()) { A=in.nextInt(); B=in.nextInt(); n=in.nextInt(); if(A+B+n==0)break; h.solve(A, B, n); } } }
- 1
信息
- ID
- 2364
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者