免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: kkboy_dyc
打印 上一主题 下一主题

分享:内华达州一家IT公司的面试题目(附上公司信息) [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-09-10 15:33 |只看该作者

回复 #30 sunnyfun 的帖子


光顾着闲聊了。
俺再琢磨琢磨。整理一下,写个完整的放上来再讨论。感谢大家的宝贵意见。收兵,睡瞌

论坛徽章:
0
32 [报告]
发表于 2008-09-10 16:13 |只看该作者
原帖由 fan12 于 2008-9-10 15:07 发表


此言差矣

1. 在我看来,业务流程比算法好设计
2.大学谁研究算法?


兄弟,上面是中文,不是英文,意思不难理解。你真挑战智商了,佩服。。。。

论坛徽章:
0
33 [报告]
发表于 2008-09-10 16:40 |只看该作者
原帖由 fan12 于 2008-9-10 14:25 发表


这个根据什么来包啊?


遇到奇怪的箭头就包起来,呵呵

论坛徽章:
0
34 [报告]
发表于 2008-09-10 16:55 |只看该作者
看我 的 :

关于参数调用怎么传递没想明白,用了个global, 估计不怎么对,大家看看思路就好,

看完接着侃

貌似还用了个递归

  1. <?php

  2. class Paydate_Calculator

  3. {
  4. public function Calculate_Due_Date($fund_day, $holiday_array, $pay_span,$pay_day, $direct_deposit)
  5. {
  6.         //global $fund_day, $holiday_array, $pay_span,$pay_day, $direct_deposit;

  7.         $pay_day=date();         //我理解应该是客户跑来还款或说自己要在某天还款,营业员向系统输入客户说的这个日子,
  8.                                               //一般就是当天,也可以指定

  9.         $DueDate=$pay_day;       //首先设置$DueDate为$pay_day,即当天
  10.         $type='forward';                                   
  11.        
  12.         Cal_Due($DueDate);           //开始算

  13.         return 0;         //这个用不用去掉?万一上面没算出是不是得有个交代?
  14. }

  15. //具体算法
  16. function Cal_Due ($Due) {

  17.       // while($type=='forward'){    //这句错了,不应该要的 ,成死循环了,晕               

  18.       //第一关:现金还款还是信用卡? 貌似现金还款给少算一天利息
  19.         if (!$direct_deposit) {      

  20.            $Due+=24*60*60;     //非现金还款,Due Date 加1天

  21.         }

  22.        
  23.       //第二关:上面确定的还款日是不是正好是周末?银行不上班

  24.         do_weekend($Due);                //是周末,do_weekend()搞了个小循环,总有不是周末的时候

  25.      //第三关:不是周末完了,是不是假期?
  26.        
  27.         while (in_array($Due,$holiday_array){ //是假期,把$type设成‘reverse’执行do_weekend()
  28.                                                                           //不过有没可能周末完了是假期,假期完了又周末,死循环呢?我又要倒了:em16:
  29.        
  30.                 $type='reverse';  
  31.                
  32.                 do_weekend($Due);                   
  33.         }
  34.   
  35.     //第四关:到没到借款的十天后?

  36.     if ($Due>=$fund_day+10*24*60*60){
  37.        
  38.            return $Due;    //到10天后了,确定还款日期,返回
  39.           
  40.         }
  41.         else
  42.         {
  43.                 Cal_Due ($Due+=$pay_span);   //不到10天就还款,给往后加上个还款周期,再算
  44.        
  45.         }
  46.   }

  47. //}

  48. //周末
  49. //周末和假期有些混乱,结合上面第二关和第三关while的不同,感觉应该写的是对的,但不太顺
  50. function do_weekend($Due){

  51.         while (is_Weekend($Due)) { //如果是周末,就循环,不过最多执行两次

  52.         if ($type='forward') {  //是周末,还款日后推
  53.        
  54.                 $Due+=24*60*60;       
  55.        
  56.         }
  57.         else if ($type='reverse'){   //是假期还款日要往前推
  58.        
  59.                 $Due-=24*60*60;  
  60.        
  61.         }
  62.        
  63.    }

  64. }

  65. }

  66. ?>
复制代码

[ 本帖最后由 fan12 于 2008-9-10 21:53 编辑 ]

论坛徽章:
0
35 [报告]
发表于 2008-09-10 18:24 |只看该作者
刚写的代码,供参考,欢迎讨论。
<?php


class Paydate_Calculator
{
    /** This function determines the first available due date following the funding of a loan.
    * The paydate will be at least 10 days in the future from the $fund_day. The
    * due_date will fall on a day that is a paydate based on their paydate model
    * specified by '$pay_span' unless the date must be adjusted forward to miss a
    * weekend or backward to miss a holiday
    * Holiday adjustment takes precedence over Weekend.
    *
    * @param unix_timestamp $fund_day The day the loan was funded.
    * @param array $holiday_array An array of unix timestamp's containing
    * holidays.
    * @param string $pay_span A string representing the frequency at which the
    * customer is paid. (weekly,bi-weekly,monthly)
    * @param unix_timestamp $pay_day A timestamp containing one of the
    * customers paydays
    * @param bool $direct_deposit A boolean determining whether or not the
    * customer receives their paycheck via direct deposit.
    * @return unix_timestamp A unix timestamp representing the determined due
    * date.
    */


    //$fund_day:可以理解为账单日

    //$pay_day:可以理解为上次还款日

    //$due_day:需要返回的本次还款日

    //这几个定义可参考信用卡的每次最低还款规则


    //所有参数中的unix timestamp 都默认为00:00:00时刻的值

   
    public function Calculate_Due_Date($fund_day, $holiday_array, $pay_span, $pay_day, $direct_deposit)
    {        
        if ($pay_span == 'bi-weekly')
        {
            $span_str = "+2 week";
        }
        else if ($pay_span == 'monthly')
        {
            $span_str = "+1 month";
        }
        else // default: $pay_span = 'weekly'

        {
            $span_str = "+1 week";
        }
        $due_day = strtotime($span_str, $pay_day);  //根据上次还款日和还款间隔得出本次还款日

        if (!$direct_deposit)
        {
            $due_day = strtotime("+1 day", $due_day);
        }
        $day_type = '';
        while (1)
        {//循环,根据非周末和非假期规则得出正确的本次还款日

            if ($day_type == "weekend")
            {
                $due_day = strtotime("+1 day", $due_day);
            }
            else if ($day_type == "holiday")
            {
                $due_day = strtotime("-1 day", $due_day);
            }
            $day_type = '';
            if (in_array(date("D", $due_day), array("Sat", "Sun")))
            {
                $day_type = "weekend";
            }
            else if (in_array($due_day, $holiday_array))
            {
                $day_type = "holiday";
            }
            else
            {
               
break;
            }
        }
        //判断本次还款日是否在账单日的十日后

        $check_day = strtotime("+10 day", $fund_day);
        if ($due_day < $check_day)
        {//否,重复整个过程,但传递参数中的上次还款日替换为本次得到的还款日.

            $pay_day = $due_day;
//这里应该是$pay_day = strtotime($span_str, $pay_day);吗?
            $due_day = $this->Calculate_Due_Date($fund_day, $holiday_array, $pay_span, $pay_day, $direct_deposit);
        }

        return $due_day;
    }
}

?>


[ 本帖最后由 wszhl 于 2008-9-11 11:05 编辑 ]

论坛徽章:
0
36 [报告]
发表于 2008-09-10 20:30 |只看该作者
楼上的兄弟,强哦

论坛徽章:
0
37 [报告]
发表于 2008-09-10 21:57 |只看该作者
原帖由 kkboy_dyc 于 2008-9-10 05:40 发表
上个星期我面试,只给了我一道题,要求1个小时内完成。很遗憾,我没能通过。放在这里和大家分享一下,其实我真的希望看到正确的实现办法,大家一起来讨论一下吧:

这是一道关于银行借贷的应用题,要求用PHP实 ...



已经看不懂英文了

论坛徽章:
0
38 [报告]
发表于 2008-09-10 22:18 |只看该作者

回复 #35 wszhl 的帖子

码主,
1,你对$fund_day理解是什么,不是固定的吗?
     我理解是首次借款日,是固定的

2,$due_day = strtotime($span_str, $pay_day); “根据上次还款日和还款间隔得出本次还款日”
      这个怎么理解?系统自动根据上次还款日及上次与上上次的间隔确定本次还款日?
3,那个while(1)怎么跳出来?

论坛徽章:
0
39 [报告]
发表于 2008-09-10 23:06 |只看该作者

信用卡的最低还款额和免息还款日

1.对账单日期比如你的对账单日期是每个月4号那是说银行在4号这把把从上个月4号以后(即5号当天)到这个月4号之间的所有的消费取现等给你统计一下出个账单这样让你有数银行也有数这就是账单日了

2.最后还款日这是在你用卡消费或取现之后银行规定的让你还款的最后期限如果银行规定最短的还款期为20天最长为50天那最后还款日就是在对账单日期之后的第20天还以4号为对账单日为例那你的最还款日就是24号那么
每个月于1-4号消费必须在当月24号还款
5-31号消费必须在隔月24号还款
从消费日到最后还款日这其间就称为"免息期"
因为银行规定刷卡消费后于最后还款日还款是免息的
比如你于当月的1号消费那从1号到24号这之间就是免息期了;你于当月的6号消费在次月24号还款这期间也叫免想期
那总结一下于对账单日当天4号消费于当月24号还款是不是最享受了一个最短的免息期20天呢?在5号消费在次月24号还款是不是就享受了一个最长的免息期50天呢?
虽然透支取现不享受免息期待遇但也适于最长50天的还款期

3.消费或取现后如果不能全额还款可以按最低还款额还款即当期应缴金额的10及相关的利息费用不会影响个人信用记录按最低还款额还款最好关注每期的对账单上边都有列示的

最低还款额为:当期消费金额的10 当期取现金的10 上月应还未还款项 上月利息及费用

论坛徽章:
0
40 [报告]
发表于 2008-09-11 00:35 |只看该作者
我找到这个题的难点了:周末和假期的判断循环

解决:

  1. while (1) {
  2.      
  3.       if (is_weekend($due_day)) { //这句为真,后面两块不执行,直接循环
  4.              $due_day=$due_day+1;
  5.       }

  6.       else if (is_holiday($due_day)) { //这句为真,下面的else break; 不执行,循环
  7.              $due_day=$due_day-1;
  8.       }

  9.       else break; //上面都为no的时候,跳出循环

  10. }
复制代码


另外感觉不用管$type='forward',还是'reverse'呀,原图标它干什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP