我们先把洞按程序设计一般用的0基索引编号为
0, 1, 2, ... , n - 1
考虑当间隔n-1个洞时实际上还是前一个洞,而间隔n个洞实际上是间隔0个洞
第一次:从n - 1洞开始间隔0洞到0洞, 设最后到间隔n-1个洞后到达k洞 这个过程我们且称为 “第n - 1洞开始的一轮”,那么接下来就是“第K洞开始的一轮”,
由于环形的对称性,每一轮的开始洞和结束洞的间隔相同,也就是说如果一轮局清薯轮走下去,总有一轮前面进行过,而此后得过程就是重复劳动了
这样退出循环的条件就是:出现和前面相同的一轮。
我们用一个数组表示每个洞被搜索的状态,初始全为0,搜索过置1
再用一个数组表示每个洞开始的轮,初始全为0,有从此洞开始的一轮则置1
程序如下
#include <stdio.h>
#include <malloc.h>
// 修正索引值
void fix( int &iIndex, int iSize ) {
if ( iIndex >= iSize ) {
iIndex %= iSize
}
}
void search( int n ) {
int *pSearched = ( int * )calloc( n, sizeof( int ) )// 搜索标记
int *pStarted = ( int * )calloc( n, sizeof( int ) )// 轮标记
int iIndex = n - 1// 从第n - 1洞开始
for ( ) {
pStarted[iIndex] = 1// 轮标记置正激1
for ( int i = 0i <ni++ ) {
iIndex += i+1
fix( iIndex, n )
pSearched[iIndex] = 1// 搜索标记置1
}
if ( pStarted[iIndex] ) {
// 下一轮前检查,已进行过就退出搜索循环
break
}
}
// 输出没搜索过的洞号
printf( "output: ", n )
for ( int i = 0i <ni++ ) {
if ( pSearched[i] == 0 ) {
printf( "%d ", i + 1 )// 由于是0基索引值,输出时+1
}
}
printf( "\n" )
free( pSearched )
free( pStarted )
}
void main() {
int n
printf( "intput: " )
scanf( "%d", &n )
search( n )
}
Stanley,一个来自一个穷人家庭的小男孩,体型偏胖,胆小懦弱。他的父亲聪明,肯吃苦,有耐力,就是没有运气。目前正在研究运动鞋,想要发明一种可以recycle运动鞋的设备。无论他做什么,从来没有成功过。Stanley家族的人们习惯把这个坏运气归咎枣镇于他们的曾曾曾祖父身上,他们习惯说It’s all because of his no-good-dirty-rotten-pig-stealing-great-great-grandfather.但是,每当Stanley的父亲沮丧说这句话的时候,Stanley的妈妈就会安慰他说,你们的first Stanley不就是在股市发了大财嘛。但是,他的妈妈并没有提及后来的事情---他在股市挣的钱都被一个叫KB的女土匪给抢走了。Stanley在学校里也经常被欺负,有一个比Stanley还要矮小瘦弱的男孩经常欺负Stanley。有一天,那个小男孩又欺负Stanley,把他的笔记本扔进厕所。Stanley费了很大劲把笔记本捞出来,洗干净然后回家。在回家的路上,一双运动鞋从天而降,正好砸在Stanley的头上。Stanley捡起运动鞋很兴奋,他觉得可以帮到父亲,于是迅速的往家里跑。结果,还没有跑到家就被警察逮住了。偏偏这个运动鞋非常值钱,是一个有名的明星的拍卖品。于是,Stanley因为偷窃被捕了。无论他说什么,也没有人相信运动鞋是从天而降。Stanley面临两个选择:要么坐牢,要么去Camp Green Lake.
从来没有参加过camp的Stanley父母觉得这个是不是有钱人经常去的camp。于是,他们选择让Stanley去Camp Green Lake.
故事就从这里开始了。这里名字是Green Lake。可是,一点绿色也没有,一片水洼也没有。荒凉,炎热,就是一片沙漠。这里还有一种非常恐怖的动物,一种颜色亮丽却剧无比的蜥蜴,被毒蜥蜴咬了之后会立刻死去。在这里有好几个男孩子,他们都不用自己的真名字,而是彼此有这里的“名字”。这些名字很有意思,比如有个男孩叫X-Ray,可是,他却带着厚厚的镜片,视力是最差的一个。这些孩子都是因为犯了错而被送到这里来的。在这里,孩子们每天要做的事情就是挖洞。每人每天要挖一个5英尺宽,五英尺深的洞。在这里孩子们吃的,喝的东西都是极其少的。洗澡的时间也只有4分钟。每天早上要4点半起床挖洞,因为太阳出来之后就会被晒得没有力气干活。所以要早早起床干活。这里的日子太苦了。
这里有几个监管人员-----Mr. SirMr.Pendanski and the Warden.其中这个监狱长是个红头发长相很凶的女人。这个老女人很凶残,其他人都很怕她。
Stanley刚开始挖洞的时候,很是痛苦,手掌都破了,浑身疼得厉害。在这里。其他的孩子也欺负Stanley,只有一个叫Zero的男孩不说话,一直沈默不语。Stanley也学会用不说话保护自己。
他们挖洞除了有大小的要求之外,还有一个规定就是无论挖到什么都要交给监狱长那个老女人。如果监狱长喜欢这个东西的话,那么挖到东西的这个孩子就可以休息一天,不用在挖洞了。Stanley有一天挖到了一个鱼的化石交给了典狱长。可是,那个老女人对这个不感兴趣,并没有让Stanley休息而是继续挖洞。然而,那个叫X-Ray 的小男孩却因此威胁Stanley,让他以后无论挖到什么都先交给他,因为他眼神不好,很难发现东西。Stanley为了避免麻烦就答应了。并且真的在后来挖到一个刻有KB字样的金属小管之后,给了X-Ray.
而X-Ray在第二天很逼真地假装是自己在挖洞的时候发现的这个东西之后,真的就休息了,这一天就不用再挖洞了。而其他的孩子则被要求一起来挖X-Ray的这个洞,可是他们挖了一天再也没有发现什么。这时候,Stanley明白了,这些监管让他们挖洞并不是为了塑造他们的品格,而是为那个老女人找东西。
这中间讲述了另外两个故事。一个是Stanley祖先的故事。也就是Stanley爸爸口中的那个no-good-dirty-rotten-pig-stealing-great-great-grandfather的故事。这位Stanley的曾曾曾曾祖父爱上了一个美丽的姑娘,想娶她。歼岩毁可是这个姑娘的父亲想把氏备女儿嫁给一个很老的富豪,因为这个富豪会给他家一头很大的猪。Stanley的曾曾曾曾祖父知道后很伤心,他就去向他的好朋友---一个埃及老女人求助。这个老女人知道很多很多事情 有点像女巫,她没有左脚不能走路。她的名字是Madame Zeroni.她告诉Stanley的曾曾曾曾祖父,他不应该这么早结婚,应该像她儿子一样去美国闯荡,还告诉他,他爱的女孩什么也不会,还没有脑子,劝他不要娶她。可是,他太爱她了,一定要娶她。于是这个老巫婆就答应帮助他。给了他一只很小的小猪,比老鼠大不了多少。让他每天抱着小猪上附近的一个山上去喝水,一边喝水还要一边给小猪唱自己交给他的咒语。。这样等到女孩出嫁的时候,他的猪就比那个富豪的猪大了,他就可以娶她了。作为交换的条件是,等他成功之后,要背着自己到山上去喝那里的泉水,并且给自己唱那只咒语。如果,他没有兑现诺言,他的子孙后代将永生永世遭受厄运的诅咒。
在女孩出嫁的这一天,Stanley的曾曾曾曾祖父本应最后一次抱着小猪上山,可他为了不那么狼狈,就没有去最后一次。结果导致他的猪和那个富豪的猪一样重。女孩的父亲很难抉择,就让女孩自己选,女孩也很为难,甚至想出一个数字,让这两个人猜,谁猜对了就嫁给谁。女孩的变现让Stanley的曾曾曾曾祖父明白了,原来这个女孩不爱自己,而且真的没有脑子。于是他放弃了这个女孩。把猪送给他们作为新婚贺礼,自己走了。在他回家的路上,被别人拉上了去美国的船。等到了船上他才想来没有兑现自己的诺言。
到了美国之后Stanley的曾曾曾曾祖父娶了一位能干,有思想的女孩。他一直在找那个女巫的儿子,一直没有找到。可是,真的就是一直没有还运气。这就是为什么Stanley家族一直把自己的坏运气怪罪到他的身上的原因。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)