幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3211|回复: 7

[通用编程] 算法題

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-12-20 11:40:22 | 显示全部楼层 |阅读模式
出售金鱼者决定将缸里的金鱼分五次全部卖出:第一次卖出全部金鱼的一半加
      二分之一条金鱼;第二次卖出剩余金鱼的三分之一加三分之一条金鱼;第三次
      卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五公之一
      加五分之一条金鱼。现在还剩下11条金鱼,当然出售金鱼时不能切开或者有任
      何破损的,问这鱼缸里原有多少条金鱼?(出售金鱼.c)
      (答案:鱼缸里原有59条金鱼。)
  1. main()
  2. {
  3.          int m,i=1,j,n=13;
  4.          for (m=13;(n!=11)||(i<=4);m+=2)
  5.        /*变量m为原有金鱼的数量,n为卖完i次之后所剩金鱼的数量。只有n=11并且i>4
  6.          才退出该循环。*/
  7.        {
  8.                n=m;
  9.                for (i=1;i<=4;i++)       /*模拟前四次卖金鱼的过程*/
  10.                {
  11.                         if (n%(i+1)==i)      /*符合要求就继续*/
  12.         n=n*i/(i+1);
  13.            else break;          /*否则就重新取值*/
  14.                }
  15.       }
  16.      printf("鱼缸里原有%d条金鱼。",m-2);
  17. }
复制代码
我想問的是
if (n%(i+1)==i)      /*符合要求就继续*/
  n=n*i/(i+1);
   else break;   
這段代碼到底是根據什麼判斷呢?還有按牠這樣的話,m-2, 那就是求得 n=m=61, 將n=61代主下面的似乎第二次循環就不符合了,怎麼這樣呢?[s:8]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-12-20 20:03:28 | 显示全部楼层
其实偶题目就没有理解…… [s:5] 什么叫做一半有1/2条??
Style-C
回复 支持 反对

使用道具 举报

0

主题

6

帖子

1289

积分

⑥精研

积分
1289
QQ
发表于 2007-12-20 21:07:29 | 显示全部楼层
不能切开,又卖1/2条。。。理解不能。
还有就是定义了j,但是有没有使用j,囧。。
3Days汉化组&DCPC汉化组&H2O汉化坑·lxhbs
回复 支持 反对

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-12-20 23:55:16 | 显示全部楼层
按照中学计算机奥赛的要求的话,完全可以使用公式求解,没必要这么麻烦,同上,N分之一条金鱼理解不能
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

32

主题

1176

帖子

10216万

积分

⑥精研

大家都爱好少年

积分
102162186
发表于 2007-12-21 00:02:51 | 显示全部楼层
[s:5] 很简单,因为那堆金鱼是单数,比如三条吧,一半就是1。5
那一半再加1/2条就是两条了
战,然后死!
回复 支持 反对

使用道具 举报

70

主题

1702

帖子

4万

积分

⑧专业

积分
40693
发表于 2007-12-22 10:58:42 | 显示全部楼层
占某专业版里说一非专业的话,希望bz不要介意,内容是:

              小夜啊 [s:6] 跪求你教我数学好不?泪扑,死拽小夜不放.....
回复 支持 反对

使用道具 举报

2

主题

11

帖子

123

积分

③业余

积分
123
发表于 2008-2-10 17:13:42 | 显示全部楼层
很晕 太晕……
这个题能不能用下递归?
回复 支持 反对

使用道具 举报

18

主题

463

帖子

4万

积分

⑧专业

我就是一个茶几...

积分
48325
QQ
发表于 2008-2-10 20:17:46 | 显示全部楼层
破程序写的真烂。。一点可读性都没有。。。


if (n%(i+1)==i)      /*符合要求就继续*/
这句判断,就是判断(n/2+1/2)或(n/3+1/3)等。。是不是整数
假设说n/(i+1)=s余i,那么正常的商应该是s+i/(i+1),s是整数部分,i/(i+1)是小数部分
那么s+i/(i+1)+1/(i+1)就等于s+1,也就是小数部分不存在了,也就是整数


  n=n*i/(i+1);
这句求的是剩余的鱼....
要注意的是,由于而整除的关系,n*i/(i+1)并不等于n-n/(i+1)...
而是等于n-n/(i+1)-1



還有按牠這樣的話,m-2, 那就是求得 n=m=61, 將n=61代主下面的似乎第二次循環就不符合了,怎麼這樣呢?
至于这里,要解释一下循环...
循环体结束一次后,循环变量做步长变化,这里是+=2
而判断是否循环则是在循环开头判断
所以当m=59时,n=59,经过循环体后,n=11,循环结束
然后m步长+2,变成61,再去循环头判断是否循环,n=11,不进行循环,跳出循环,此时m为61
然后printf 61-2=59
没有永远的朋友,也没有永远的敌人,只有永远的利益!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-30 02:37 , Processed in 0.025766 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表