acm算法经典例题

上传人:M****1 文档编号:560281882 上传时间:2023-08-29 格式:DOC 页数:83 大小:410.50KB
返回 下载 相关 举报
acm算法经典例题_第1页
第1页 / 共83页
acm算法经典例题_第2页
第2页 / 共83页
acm算法经典例题_第3页
第3页 / 共83页
acm算法经典例题_第4页
第4页 / 共83页
acm算法经典例题_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《acm算法经典例题》由会员分享,可在线阅读,更多相关《acm算法经典例题(83页珍藏版)》请在金锄头文库上搜索。

1、一、数论1: olf adabbt描述here i all wit oles rond。 heoles aesg from 0ton-A rbbit mustheinoeof the hole。 A wlf searches rabtinnckwiserder。 The first hole get ino i th one signed wth0. Then hil get into th hoe evey hs。 For eamp, m=2 n n=6, hel il ge itohe hols hh ar sined 0,,4,0.If the rabit hides inthe h w

2、chsigned,o 5, she will survve o wecaltese holes te safe ol。输入Th inut strts with a otieintege P whichinicatesthe umbr o ts caes. Then on the fli P lines,ch lin consists2 poiie intee and n(0,n214748368)。输出For ach nut m n, if sa hoesist, yo sho utut”YES”, ese output NO” i singlline。样例输入21 22样例输出OYES翻译:

3、描述一座山有n个洞,洞被标记为从到1。兔子必须藏在一个洞中。狼会逆时针方向搜索兔子。狼一开始在洞0,然后他会每m个洞进去一次。例如:=2,n=,狼就会依次进入洞 2 40。如果兔子藏在1 3 5就安全。输入第一行一个数字,表示下面有组测试数据,每组测试数据2个数 n(m,n2147483648)输出每组数据输出一行,如果存在安全洞穴,输出”YES”,否则输出NO思路/方法:你是不是觉得总是无法通过,看看下面的解析假设有=6个洞 1 2 3 4 5当m=时,狼进的洞是0 2 0,也就是形成了一个循环,永远也到不了其他洞穴当m5时,狼进的洞是05 432 0,这时所有的洞都遍历了一遍。思考:当m=

4、4和=5时,到底有什么区别?当n和m有公约数(非1)时,就会形成一个数字个数小于n的循环当n和m无公约数时,就会形成一个数字个数为n的循环,此时没有安全洞穴。解题关键:这题就转化成了判断两个数是否有公约数.代码:#inl m n; i(gatetComnDiisr(m, )= 1)/公约数为说明互斥,没有安全洞穴 cot NOn”; ls cout YS”; eturn;2: b描述给定和b,输出ab的最后一个数字.输入输入数据有多组,每组数据占一行,每行为a和b的值(0a,23)输出对每组输入数据,输出ab的最后一位数字,每组数据占一行.样例输入2 23 样例输出41思路/方法:如果你模拟a

5、b次肯定会超时,而且数字还会超出Int范围题目说只要最后一个数字,回想一下小学时学的乘法过程,貌似乘数最后一位和前面的无关我们大胆的尝试一下用a的个位代替a,然后我们发现循环b次还是会超时,这是我们要想办法减少循环的次数,试一下是不是有周期规律这时我们来列举一下2的n次方的个位:2 62 8 6我们发现周期为4,我们在试试19的n次方,发现周期都是4,所以,我们可以用b4代替b,需要注意的是,当b%0时,我们需要给他加上4,不然就不循环了。代码:incude stohint in() int a, b,, ; hile(af(d %,a, b) != EF) = b 4; if(b = 0)

6、b = 4; a a10; 1; fo( = ; i ;+) = a; = t 0; rinf(”d, ); retr;: 筛选法求素数描述请使用筛选法输出a,之间的所有素数.输入输入数据有多组,每组数据占一行,每行个正整数a和,其中2a=10000。输出每组数据按从小到大的顺序输出a,中所有的素数,每行最多输出0个素数.每组数据之后空一行。样例输入2 32 50样例输出 323 5 7 11 117 19 23 93 3741447思路/方法:这题测试的数据量很大,所以尽量少循环,尽量少判断,要非常精简才能通过。1.定义一个全局变量shrts10001;/全局变量默认为02.把数组中下标为奇

7、数的值改为1,偶数不用改,因为除了2,其他偶数都不是素数s 1;/2也是素数fo(i =3; 100001;i= 2)/把奇数全部假设为素数 i = 1;3把素数的倍数挖掉,改为.(从2开始到根号10000之间的素数的倍数挖掉)for(i =2; i 000; +)/小于根号0000 (si)/判断是否为素数,只有素数的倍数才挖掉 fr(j 2; j100; j= )/把i的倍数的值改成0 sj =0;最后一点是输出格式,每组之间一个空行,另外一行最多个。定义一个变量来记录输出了多少个,达到十个就输出换行。具体看代码.代码:#inlude io.hsort 100001;/全局变量默认为0in

8、t min() in , a, , i, ; s2=;/2也是素数 fr( =;i 1000; i i + )/把奇数全部假设为素数 s 1; fo(i= 2;i 10; i+)/小于根号10000 if(si) for(j i 2;j10001;j j i)/把i的倍数的值改成0 sj = 0; hile(saf(”%d d”,b) != OF) t = ; for(i a; i = b;+) i(si)/素数就输出 if(t) i(t =10) prnf(n); = 0; else rnf( ); +; print(”d”,i); prnf(”n); etun 0;: The one to

9、 rean描述Thr reN soldirstanding i oe line. Tey aremrked from 1 t N, frm ht toeft。 Ad te ar ive a number. Tethe sliers nubered off, straigtfrm te ighthadman。The on woreportd a nb this th muliple o m wa kept i th lie。 thrsave toave elne.Theyntinuedoing this till teumber eople in t line is estan m。 or xm

10、, here 10 soldier, nd = 3. rthe irstme th olie wo aremard 3, 6, 9 remainin theline. or te scndte he solde wh smarked reminsn the lie. Becus the nuerofldiesin e ine isless ha , o he ier mrked 9was henlonet remain ihe lie. Nowe wa tknow whowill th ons to remain, canyou tels ?输入her are several tet caes in heinp. ach testass s ol oline,ntaintwo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号