打卡分钱项目,关于每个人分钱的方法

<?php 
//人数
$member = 50;
//奖金池
$moneyPool = 10000;


	/**
     * @param $member 人数
     * @param $moneyPool 奖金池
     * @return array 钱数
     */

function test($member,$moneyPool){


	$a = array();
	//算出每个人的浮动比率
	for ($i=0; $i <$member ; $i++) { 
		$float_true = randomFloat();
		 array_push($a,$float_true);
	}
	//算出平均值
	$avg = $moneyPool/$member;
	$money_list = array();
	$sum = '';
	foreach ($a as $key => $value) {
		//每个人分到的人民币
		$money = $value*$avg*0.1;
		 array_push($money_list,$money);
		 $sum += $money;
	}

	echo '<pre>';
	// print_r($money_list);
	// print_r($sum);
	//自动分配的钱数总和如果大于奖金池
	//重构每个人分到的钱
	$money_list_2 = array();
	$sum_2 = '';
	// if ($sum-$moneyPool > 0) {
		$diff_sum = $sum-$moneyPool;
		$avg_money = $diff_sum/$member;
			// echo '<br>$avg_money'.$avg_money.'<br>';
			//重构每个人分到的钱,确保总和和奖金池一致
			foreach ($money_list as $key => $value) {
			//每个人分到的人民币
			$res_mon = $value - $avg_money;
			// echo '<br>$value'.$value;
			// echo '<br>$avg_money'.$avg_money;
			// echo '<br>$res_mon'.$res_mon;
			 array_push($money_list_2,$res_mon);
			 $sum_2 += $res_mon;
		}
	$moneyMax2 = maxTwo($money_list_2);
	//除去金额最高的两人,找出剩下的
	$be_left = array_diff($money_list_2,$moneyMax2);
	$member = $member - 2;
	//总奖金池/人数 .每个人拿出5%给最高的2个人
	$avg = $avg*0.10;
	foreach ($be_left as $key => &$value) {
		$value = $value-$avg;
	}
	//每个人减少了5% 算出一共减去的
	$diff_sum = $member*$avg;
	//把匀出来的钱分给最高的2个人
	$money_max2_t=array();
	array_push($money_max2_t,$moneyMax2[0]+$diff_sum*0.35);
	array_push($money_max2_t,$moneyMax2[1]+$diff_sum*0.65);

	$result_list = array_merge($money_max2_t,$be_left);
	$sum_t = 0;
	foreach ($result_list as $key => &$value) {

			$sum_t += $value;
			$value = number_format($value,2);
	}
	return $result_list;
}


//封装保留2位小数点的函数
function randomFloat($min = 8, $max = 15) {
   $num =  $min + mt_rand() / mt_getrandmax() * ($max - $min);
   return  number_format($num, 2);
}



//封装找出钱最高的2个人
function maxTwo($arr){
	$maxTwoMoney = array();
	array_push($maxTwoMoney,max($arr)); 
    $arr = array_diff($arr,array(max($arr)));
    array_push($maxTwoMoney,max($arr)); 
    return $maxTwoMoney;
}


print_r(test($member,$moneyPool));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,由于篇幅限制,无法在这里展示完整的健康打卡系统项目代码。不过我可以提供一个简单的示例代码,供您参考: 首先是一个简单的UserController类,用于处理用户相关的请求: ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public ResponseEntity<User> login(@RequestBody User user) { User loginUser = userService.login(user.getUsername(), user.getPassword()); if (loginUser != null) { return ResponseEntity.ok(loginUser); } else { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } @PostMapping("/register") public ResponseEntity<User> register(@RequestBody User user) { User newUser = userService.register(user); if (newUser != null) { return ResponseEntity.ok(newUser); } else { return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } } @GetMapping("/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { User user = userService.getUserById(id); if (user != null) { return ResponseEntity.ok(user); } else { return ResponseEntity.notFound().build(); } } } ``` 然后是一个简单的UserService类,用于处理用户相关的逻辑: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public User login(String username, String password) { User user = userRepository.findByUsername(username); if (user != null && user.getPassword().equals(password)) { return user; } else { return null; } } public User register(User user) { if (userRepository.findByUsername(user.getUsername()) != null) { return null; } else { return userRepository.save(user); } } public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } } ``` 最后是一个简单的UserRepository类,用于与数据库进行交互: ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); } ``` 这只是一个简单的示例代码,实际的健康打卡系统还需要包括许多其他的功能和模块。如果您需要更多的帮助或指导,请告诉我您的具体需求,我会尽力为您提供帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值