关于一个算法逻辑思维,算不出?

考试题目:有200名学生,每个人手上都有1块钱,他们要轮流进入教室,进入教室门口会询问 老师手上是否有钱(老师初始手上的钱是0)如果老师手上有钱的话,就要求老师把他手上的钱给你,加上你手上的1块钱然后根据教室里边现有的学生数量 (也包括自己) 把你的钱平均分给到大家,但是人民币面值最小只有1分,一旦同学数量多了之后 1块钱就没法平均分了,如果出现这种情况,就要求这名同学不要把钱分给大家 而是把他手上的钱,放到老师那边保管。要求:1.最终计算得出 这200个学生分到钱+老师剩余保管的钱必须等于 200元,1*200=2002.只要老师保管的钱+自己手上的钱 能够平分的时候必须分掉.平分的时候小于1分就不要分给同学,而是把钱给老师保管4.每次每个写生分的钱精确到分,比如0.143 虽大于0.01 但是只能把0.14分出去 还有 0.003直接去掉 求解:这200个学生每人分到多少钱? 老师那边还剩余多少钱?
有人可以算的出来吗?假如300人 500人 2000人呢?哪位大神能出个算法。有红包感谢。

墨楠小
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
一颗红心
最佳答案

不知和你的描述是否相同,你可以自己调整相关变量

<?php
echo PHP_EOL;

$studentInNum = 0;
$studentOutNum = 200;
$studentOutMoney = 1;
$teacherMoney = 0;
$shareMoney = 0;
$info = [];
$perRecord = [];

for ($i=1; $i <= $studentOutNum; $i++){
    $shareMoney = 0;
    // 当老师手里有钱
    if ($teacherMoney>0){
        $shareMoney = round(($teacherMoney + $studentOutMoney) / ($studentInNum + 1),2);
        if ($shareMoney>0.01) {
            // 生成进入教室的学生,并分钱
//            array_push($perRecord, 0.00);
            $perRecord['第'.$i.'进入的学生'] = 0.00;
            foreach ($perRecord as $k => $studentInMoney){
                $perRecord[$k] += $shareMoney;
            }

            $teacherMoney = 0;
        }else{
            $teacherMoney += $studentOutMoney;
        }
    }else{
        // 当老师手里没钱
        $teacherMoney += $studentOutMoney;
    }
    $studentInNum++;

    // 记录本次分钱(后)的情况
    array_push($info, [
        'teacherMoney'  =>  $teacherMoney,
        'studentInNum'     =>  $studentInNum,
        'shareMoney'    =>  $shareMoney,
    ]);
}

var_dump($info);
var_dump($perRecord);
5年前 评论
讨论数量: 3
一颗红心

不知和你的描述是否相同,你可以自己调整相关变量

<?php
echo PHP_EOL;

$studentInNum = 0;
$studentOutNum = 200;
$studentOutMoney = 1;
$teacherMoney = 0;
$shareMoney = 0;
$info = [];
$perRecord = [];

for ($i=1; $i <= $studentOutNum; $i++){
    $shareMoney = 0;
    // 当老师手里有钱
    if ($teacherMoney>0){
        $shareMoney = round(($teacherMoney + $studentOutMoney) / ($studentInNum + 1),2);
        if ($shareMoney>0.01) {
            // 生成进入教室的学生,并分钱
//            array_push($perRecord, 0.00);
            $perRecord['第'.$i.'进入的学生'] = 0.00;
            foreach ($perRecord as $k => $studentInMoney){
                $perRecord[$k] += $shareMoney;
            }

            $teacherMoney = 0;
        }else{
            $teacherMoney += $studentOutMoney;
        }
    }else{
        // 当老师手里没钱
        $teacherMoney += $studentOutMoney;
    }
    $studentInNum++;

    // 记录本次分钱(后)的情况
    array_push($info, [
        'teacherMoney'  =>  $teacherMoney,
        'studentInNum'     =>  $studentInNum,
        'shareMoney'    =>  $shareMoney,
    ]);
}

var_dump($info);
var_dump($perRecord);
5年前 评论

@一颗红心 谢谢大神,我已经拿到答案啦,有为java大神下午帮我解答了一下,非常感谢。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!