1 条题解

  • 0
    @ 2025-4-12 21:54:23

    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
    上传者