Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
12
返回列表 发新帖
楼主: ~Zero
打印 上一主题 下一主题

page system

[复制链接]

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

11#
发表于 2010-9-13 11:35 PM |只看该作者
回复  Super-Tomato

哦哦~抱歉我没看清楚他的问题。 也看不懂。
就以为他要的只是普通的。
宅男-兜着走 发表于 2010-9-13 11:25 PM



呃,也就是类似已知一個箱子刚好可以装 8 粒篮球,如果篮球用完就用另一不同体积的球类繼續装到箱子满。
目前有A(篮球) 20 粒,B球 20 粒,而 A 球的体积等于 B 球的 4 倍,所以目前樓主所要求的是如何知道某箱内有多少 A 球和 B 球


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

12#
发表于 2010-9-13 11:44 PM |只看该作者
已知条件
1. A = 1, B = A * 4
2. A 与 B 各 20
3. 限制 A 的數量 = 8

接下來對 programmer 來 ...
Super-Tomato 发表于 2010-9-13 05:26 PM

这就是最大的问题所在, 我想不到很好的运算方法. = =+


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

13#
发表于 2010-9-13 11:49 PM |只看该作者
这就是最大的问题所在, 我想不到很好的运算方法. = =+
~Zero 发表于 2010-9-13 11:44 PM



如果你的數量不會很多的話,你就用最简单的 looping 方式慢慢递减计算吧,這样编写过程會加强你對计算的变化


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

14#
发表于 2010-9-14 12:01 AM |只看该作者
本来是 php, 可是我把 syntax 都简单化让大家比较容易了解 algorithm. 题目就是 tomato 的篮子跟球的例子.

  1. page = 3; big = 20; small = 20;

  2. current = 1; start = 0; limit = 0;
  3. while (current < page) {
  4.       basket = 0;
  5.       while ( basket < 32 ) {
  6.             if (big > 0) { big--; basket+=4; start++ }
  7.             else { small--; basket++; start ++ }
  8.       }
  9.       current++
  10. }
  11. // 到这里应该得出 start = 16 了

  12. basket = 0; limit = start;
  13. while (basket < 32 && (big > 0 || small > 0)) {
  14.       if (big > 0) { big--; basket+=4; limit++ }
  15.       else { small--; basket++; limit++}
  16. }
  17. // 到这里就算得出 limit 了.
复制代码
这个方法的话, 就每次换 page 的时候就要 sql 找 count 一次. 虽然是有点浪费 processing power, 但是总比 session 容易多了.
谢谢 tomato, 给了很大提示. 呵呵~


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

15#
发表于 2010-9-14 12:03 AM |只看该作者
如果你的數量不會很多的話,你就用最简单的 looping 方式慢慢递减计算吧,這样编写过程會加强你對计算 ...
Super-Tomato 发表于 2010-9-13 11:49 PM

那如果数量很多呢?


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

16#
发表于 2010-9-14 12:14 AM |只看该作者
那如果数量很多呢?
~Zero 发表于 2010-9-14 12:03 AM



當然就是抓重點计算,我想這個應該是不难的计算才對啊


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

17#
发表于 2010-9-14 12:28 AM |只看该作者

  1. page = 3; big = 20; small = 20;

  2. basket = page * 32;
  3. if ( big*4 >= basket ) { start = page*8 }
  4. else { start = big + (basket - big*4) }
复制代码
其实 limit 没那么重要, 我可以直接 sql limit 32 就好了, 要 display 多少我可以在 php 里面弄.


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

18#
发表于 2010-9-14 12:51 AM |只看该作者
其实 limit 没那么重要, 我可以直接 sql limit 32 就好了, 要 display 多少我可以在 php 里面弄.
~Zero 发表于 2010-9-14 12:28 AM



看不明白你這段要求甚么,但你應該把计算重點放在唯一的混合部份

$mixPage = ceil($a / $limit); //馬上即可知道在哪個 page 會進行混合

混合 :
A = $a % $limit;
B = ($limit - A) * 4;


當 $a = 20, $limit = 8 的情况下代入得
$mixPage = 3;

A = 4;
B = 16;


這样已經够浅白了,之後的部份就自己完成吧


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

19#
发表于 2010-9-14 09:42 AM |只看该作者
其实就是说,
big 占据 4 个位置, small 占据 1 个位置,
如果要找第 3 面的话, 那么前面 2 面就占据了 2 x 32 的位置.

if ( big x 4 >= basket ) 那么, start 就是在 2 x 8 = 16 了.
else 就是说 big 的不够, 已经开始 small 了, 那么 start 就是在 big 的数量加上 basket 填满 big 后的空缺.

你给的找 mix page 的方法也不错, 谢谢参考.


回复

使用道具 举报

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

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-10-25 10:27 AM , Processed in 0.096023 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部