자바 모방 다 중 할인 알고리즘 실현

3501 단어
최근 의 프로젝트 는 위 챗 에서 가격 을 깎 는 것 과 관련 이 있 습 니 다. 위 챗 에서 사용 자 는 가격 을 깎 고 친 구 를 초대 하여 가격 을 깎 아 달라 고 할 수 있 습 니 다. 각 상품 은 최저 가격 이 있 고 가격 을 깎 는 횟수 를 고정 시 켜 상품 을 원가 에서 최저 가격 으로 깎 을 수 있 습 니 다. 이렇게 보면 위 챗 에서 보 너 스 를 나 누 는 규칙 과 같 습 니 다. 200 위안 의 보 너 스 를 가설 하고 10 명 이 나 누 면 1 인당 금액 은 랜 덤 이 고 10 명 이 200 위안 을 나 누 는 것 입 니 다.가격 을 깎 는 것 도 마찬가지 입 니 다. 원가 499, 최저 가격 이 299 라 고 가정 하면 10 명의 친 구 를 초대 하여 200 위안 을 깎 아 주 십시오. 10 명의 친 구 는 매번 깎 는 금액 이 랜 덤 이 고 10 번 째 친 구 는 최저 가격 299 까지 깎 았 습 니 다.
실현 방향:
1. 사용자 가 가격 을 깎 기 시작 할 때 사용자 에 게 가격 을 깎 는 금액 을 배정 하고 분 배 된 금액 을 배열 형식 으로 데이터베이스 에 저장 합 니 다. 2. 친구 가 가격 을 깎 는 것 을 도와 줄 때 순서대로 데이터베이스 에 가서 현재 분 배 된 가격 을 깎 는 금액 을 찾 습 니 다.
알고리즘 은 다음 과 같 습 니 다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author cc
 * @Decription   
 */
public class ReducePriceUtils {
    /**
     * 1.             *100      
     * 2.          ,      1 ,        (      )*100
     */
    private static final int MINMONEY = 1;
    private static final int MAXMONEY = 200*100;

    /**
     *                  ,                  ,
     *                N 
     */
    private static final double TIMES = 3.1;

    /**
     *        
     * @param money
     * @param count
     * @return
     */
    private static boolean isRight(int money,int count){
        double avg = money/count;
        //      
        if (avgMAXMONEY) {
            return false;
        }
        return true;
    }

    /**
     *         
     * @param mnoney
     * @param minS:    
     * @param maxS:    
     * @param count
     * @return
     */
    private static int randomReducePrice(int money,int minS,int maxS,int count){
        //     ,    
        if (count==1) {
            return money;
        }
        //             ,      
        if (minS==maxS) {
            return minS;
        }
        int max=maxS>money?money:maxS;
        //        ,        
        int maxY = money-(count-1)*minS;
        //        ,       
        int minY = money-(count-1)*maxS;
        //          
        int min = minS>minY?minS:minY;
        //          
        max = max>maxY?maxY:max;
        //        
        return (int)Math.rint(Math.random()*(max-min) +min);
    }

    /**
     *   
     * @param money     
     * @param count   
     * @return
     */
    public static List splitReducePrice(int money,int count){
        //       
        if (!isRight(money, count)) {
            return new ArrayList<>();
        }
        //    
        List list = new ArrayList<>();
        //                TIMES 
        int max = (int)(money*TIMES/count);
        max = max>MAXMONEY?MAXMONEY:max;
        //    
        int sum = 0;

        for(int i=0;i list = splitReducePrice(19799, 10);
        System.out.println(list);
    }

가격 인하 분배 결과:
sum:19799
[1.65, 3.94, 4.29, 3.44, 1.09, 33.65, 11.41, 43.78, 46.74, 48.0]

여기 서 소수 산정 편 의 를 위해 처음에는 금액 을 100 배로 확대 한 뒤 마지막 에 깎 은 금액 을 산정 할 때 다시 금액 을 100 으로 나 눈 것 이다.
원문의 저자 기술 블 로그:https://www.jianshu.com/u/ac4daaeecdfe 95 후 전단 의 여동생 하나, 읽 기 를 좋아 하고 친 구 를 사 귀 는 것 을 좋아 하 며 업무 중 에 발생 한 문 제 를 여기에 기록 하여 보 이 는 모든 사람 에 게 도움 이 되 기 를 바 랍 니 다.댓 글 교류 환영

좋은 웹페이지 즐겨찾기