hdoj-1005-c++

思路一:循环计算,直到第n个值

结果:超时;

思路二:用一个100大小的数组记录前100个结果,直到再次出现1,1且不为第一第二个时,出现循环,然后用(n-1)%i——i为周期长度——计算第n个值

结果:忽略了可能不以1,1为开头的循环,例如1,1,2,3,0,4,2,3,0,4.......

思路三:仔细分析,只需7*7个数必定出现循环(因为模7只能出现7种结果),所以直接以49作为周期,其余同思路2

结果:顺利AC

贴上代码:

#include <iostream>

#include <string>

using namespace std;

int main(){

    int n,A,B,t[50];

    while(cin>>A>>B>>n&&(A||B||n)){

        int temp_n=1,temp_m=1,result=1;

        memset(t, 0, 49);

        t[0]=1;t[1]=1;

        if(A==0&&B==0){

            if(n==1||n==2)

                result = 1;

            else

                result = 0;

        }

        else{

            for(int j=2;j<50;j++){

            result = (temp_n*A+temp_m*B)%7;

            t[j]=result;

            temp_m=temp_n;

            temp_n=result;

            }

            result = t[(n-1)%49];

        }

        cout<<result<<endl;

    }

    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值