zoukankan      html  css  js  c++  java
  • 杂题之 一行式子求网页页数

    1.问题描述:网页商城中每一页的商品数量是有限的,现在给出总数n (n > 0)件商品,且每页只允许显示m(m > 0)件商品

          现在要求一行表达式来计算出显示所有商品一共需要多少网页? 要求: 只能用一行表示出来,

          并且只能用(括号,加减乘除)运算符,其它的如比较运算符等都不可以用。

    2.开始我没读懂题目,以为考察的是( A?B :C)操作,所以我开始我给出的答案是:

      return (m >= n) ? 1 : ( ((n - n/m*m) > 0) ? n/m + 1 : n/m)

    结果不是那么回事。。。要求是只用加减乘除和括号求得一个表达式来计算出这个值。

    3.问题分析:

      这个问题思路显然是这样:

      1). n/m算出需要多少满页(即每页显示m个商品)

      2). 判断 n%m是为0,若为0,表示n除以m可以除尽,结果为 n/m + 0  ;若大于0,则另需一页显示,即结果为 n/m + 1;

      

      那么重点就是判断 n % m是否大于0.显然题目要求不能用取余运算符(%),那么我们要另想算出余数的办法。

        根据本题条件直接给出结果: n % m = n - [n/m] * m.  其中[n/m]为小于或等于[n/m]的最大整数。

        因为n,m都为整数,所以 直接写成: n % m = n - n/m*m;

        求余数的方法有了,接下来的问题是这样:如果余数为0,结果为 n/m + 0 ;但是如果大于0,结果为  n/m + 1,余数可以是小于m的任意整数,

      那么怎么利用 当这个余数大于0时,就变成 + 1.也就是如何在余数不知道是多少时,都可以得到 1,那么如何根据余数得到是加0还是加1呢?

        方法:观察得知,当余数为0时, value = (余数 + m - 1 = 0 + m - 1 = m - 1) < m, 于是value / m = 0;  

                当余数>=1时, value = (余数  + m - 1 ) >= m 且 value < 2* m  , 于是value / m = 1;

      这样一来便可以了,用余数加上 m - 1 然后再除以 m , 倘若余数为0,则 (0 + m - 1) / m = 0;

        若余数大于等于1,设为x(1 <= x < m)则 m <= (x + m - 1) < 2* m. 则 (x + m - 1) / 2 = 1;

      这样一来刚好满足需求。于是这个符合题意的表达式便成为:

        return ( n / m + ( (n - n/m*m) + (m - 1) ) / m); 

      总结:经过以上分析得出这个问题主要需要解决两方面:

      1)如何在 不用取余操作符的情况下,得到余数   : (n - [n/m] * m)

      2)当余数的值不知道,如何在不用判断语句的情况下得到需要加0,还是加1.   :value = ( (n - n/m*m) + (m - 1) ) / m

      

      好了,问题解决,可以踏实睡了,呵呵。

      欢迎指正与指点。

       

  • 相关阅读:
    poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包
    Qsort和Sort排序函数用法
    poj1696 Space Ant 卷包裹法 向量叉积比较
    poj1113 Wall 凸包问题 官方数据
    poj2187 Beauty Contest 凸包求点集的直径
    printf 里面的 %lf 要改成 %f G++,G++的浮点型需要%f输出,%lf就是WA!!!
    让IE6支持Fixed
    更改input type="file" 的样式
    Repeater心得
    Windows服务删除
  • 原文地址:https://www.cnblogs.com/newbeeyu/p/5922495.html
Copyright © 2011-2022 走看看