摘要: 问题描述:在走廊上有n个带锁的门,从1到n一次编号。最初所有的门都是关着的。我们从门前一次经过n此,每一次都从1号门开始。在第i次经过时(i = 1,2...n)我们改变i的整数倍号锁的状态:也就是如果们是关着的,就打开它;如果门是打开的,就关上它。举例来说,第一次经过之后,所有的门都是打开的;第二次经过时,我们只改变偶数门得状态(2号门,4号门......)这样一来,第二次经过之后,偶数门是关着的,而奇数门是开着的;第三次经过时,我们把3号门关上(该门在第一次经过时被打开),打开6号门(该门在第二次经过时被关上),以此类推。在最后以此经过后,那些门是打开的?那些门是关上的?有多少打开的门?C 阅读全文
posted @ 2012-12-11 20:25 门对夕阳 阅读(2062) 评论(0) 推荐(0) 编辑
摘要: 描述:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。解法描述:设 a>b, 当 b=0,gcd(a,b)=a,此时 x=1,y=0; ab<>0 时, 设 ax1+by1=gcd(a,b); bx2+(a mod b)y2=gcd(b,a mod b); 因为gcd(a,b)=gcd(b,a mod b); 则:ax1+by1=bx2+(a mod b)y2; 即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2; 根据恒等定... 阅读全文
posted @ 2012-12-11 10:54 门对夕阳 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 问题描述:开始的时候,板上有两个不相等的正整数。两个玩家交替行动,每次行动,当前玩家都必须在板上写出任意两个已经出现在板上的数字的差而且这个数字必须是新的,也就是说,和板上任何一个已有的数字都不能相同。当玩家再也写不出新数字时,他就输了。请问,你是选择先行动还是后行动呢?解决方法:设最初两个数较大的为a, 较小的为b,两个数的最大公约数为c。则最终能出现的数包括:c, c*2, c*3, ..., c*(a/c)=a. 一共a/c个。如果a/c是奇数,就选择先行动;否则就后行动#include <stdio.h>#include <stdlib.h>//求最大公约数in 阅读全文
posted @ 2012-12-11 10:46 门对夕阳 阅读(352) 评论(0) 推荐(0) 编辑