能力值:
( LV3,RANK:30 )
|
-
-
2 楼
65535?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
追赶问题,设共需要x次才能追上,这i,j满足
5x+n*65536 = 7x + 2
n为整数
最小x解为32767,n为1
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
65534。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
32767
字数补丁.exe
|
能力值:
( LV11,RANK:180 )
|
-
-
7 楼
32767.......
ps:3L算得真简便
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
如果是两个人跑圈,按3楼的解法就可以了,但是计算机做循环加法,是离散的,循环32767次以后Sum_j 比Sum_i大1,所以还得继续循环32768次,所以答案是65534.
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
应该这样算(5x-m*65536)=(7x+2-n*65536),若k=m-n,5x+k*65536=7x,同时5x-m*65536<65536,7x-n*65536<65536,7x-n*65536+2>0,5x-m*65536>0。n>7x/65536-65534/65536而x>65536*m/5代入,n>(5+2)x/65536-65534/65536中5x做替换就可以得到f(k)<f(x),这就是k必须满足的条件,其他同理扒拉扒拉,又因为开头有f(k)=g(x),可得g(x)<f(x),进一步压缩x和k范围
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
汗,没考虑这么复杂过,我的思路就是8楼说的跑圈问题,每圈长度65536
关于离散的问题,我认为只要保证n和X同时是整数就是了。
例如:把j的初始值修改为1,则
5x+n*65536 = 7x + 1
则进入死循环。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
学习了,都是高手。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
加了两行代码,跑了一下
int main(int argc, char* argv[]) { unsigned short i,j,k; k = 0; for(i=0,j=2;i!=j;i+=5,j+=7) {k++;} printf("Hello World! k=%d\n", k); return 0; }
结果如图
所以~~~三楼正解!
当然啦,面试的时候不能写代码跑一下,这只是后面的一个验证!如有不对之处,敬请指出 !
|
能力值:
( LV3,RANK:30 )
|
-
-
13 楼
很简单的追击问题,i的速度是5j的速度是7 两个人起跑点相差2,
跑到长度65536 也就是 j要比i多跑一圈少2,也就是65534,速度差是2
65534/2 = 32767
也可以认为是数论里面的 模问题
还有就是得注意边界问题
到底是32767 还是32766
for循环第一次进入循环不进行后面的+=操作,所以我们加32767次的时候两个数相等跳出循环,进入循环1+(322767-1)次
|
能力值:
( LV5,RANK:75 )
|
-
-
14 楼
考点是不是unsigned加满后会变为0?
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
9L是直接找x和k的范围嘛 3L通过n来求x 感觉9L的(5x-m*65536)=(7x+2-n*65536),若k=m-n,5x+k*65536=7x,同时5x-m*65536<65536,7x-n*65536<65536,7x-n*65536+2>0,5x-m*65536>0和3L就是一个意思嘛,你这些约束条件3L就已经默认了;后面的约束就看不懂了
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
数学不好 这个是什么数学式?该怎么解?n*65536怎么理解?
|
能力值:
( LV3,RANK:30 )
|
-
-
17 楼
unsigned char i,j,k,g;
for(i=0,j=0,k=4 ;(i!=j)||(j!=k);i+=5,j+=7,k+=3)
这个版本有没有解?
|
能力值:
( LV3,RANK:20 )
|
-
-
18 楼
高人,学习。
ps:这帖子怎么会在web安全版块中?
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
如果程序真的是这样的话,发布成release版之后这个空循环会被直接优化掉的,那岂不是就是0了?
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
#include <stdio.h>
void main()
{
unsigned short i,j;
unsigned long k=0;
for(i=0,j=2;i!=j;i+=5,j+=7)
{
k=k++;
}
printf("循环次数是%d\n",k);
}
这样能看到循环次数吧
打出来是32767
|
|
|