UVa OJ 350

1、简单的模拟,注意本题中给出的第一个数不一定是循环的开始,比如1234567567567567567567……如果只是判断与第一个是否相等的话,就会进入死循环。

2、注意for循环是在while内的,所以一次break不够,需要两次break才能跳出循环。

#include <stdio.h>
int z,i,m,l,j,num,count=0,a[10010]={0};
int main(void)
{
    while(scanf("%d%d%d%d",&z,&i,&m,&l)==4)
    {
        int length=0,temp,first;
        count++;
        if(z==0&&i==0&&m==0&&l==0) break;
        num=0;
        first=l;
        while(1)
        {
            a[num++]=l;
            temp=(z*l+i)%m;
            for(j=0;j<num;j++)
                if(num-1!=j&&a[j]==a[num-1]) break;
            if(j<num) break;
            l=temp;
        }
        printf("Case %d: %d\n",count,num-1-j);
        memset(a,0,sizeof(a));
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值