hdu 2721

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2721

题意:给出a、b、c、s。s是初值,每次变化有s = (a*s+b)%c。如此直到重复。这些数都写成16比特的,如果某位在所有数都是0则输出0,是1则输出1,如果都有可能输出问号。直接暴搞就可以。。。

代码:

 1 # include <stdio.h>
 2 # include <string.h>
 3 
 4 
 5 int vis[70000] ;
 6 
 7 
 8 int main ()
 9 {
10     int a, b, c, s, i, bit ;
11     char ch[20] ;
12     
13     while (~scanf ("%d", &a) && a)
14     {
15         scanf ("%d%d%d", &b, &c, &s) ;
16         memset (vis, 0, sizeof(vis)) ;
17         for (i = 0 ; i < 16 ; i++)
18             ch[i] = ((s>>(15-i)) & 1) + '0' ;
19         while (!vis[s])
20         {
21             vis[s] = 1 ;
22             for (i = 0 ; i < 16 ; i++)
23             {
24                 bit = ((s>>(15-i)) & 1) ;
25                 if (ch[i]-'0' != bit) ch[i] = '?' ;
26             }
27             s = (((a*s)%c) + (b%c))%c ;
28         }
29         for (i = 0 ; i < 16 ; i++)
30             printf ("%c", ch[i]) ;
31         printf ("\n") ;
32     }
33     return 0 ;
34 }

 

转载于:https://www.cnblogs.com/lzsz1212/p/3304702.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值