>  기사  >  위챗 애플릿  >  WeChat 빨간 봉투 잡기 코드 예제의 ASP.NET 구현

WeChat 빨간 봉투 잡기 코드 예제의 ASP.NET 구현

Y2J
Y2J원래의
2017-04-26 14:43:281932검색

그룹의 모든 사람들이 빨간 봉투를 집고, 보내고, 다시 집는 게임을 하고 있습니다. 프로그래머들은 이를 어떻게 구현하는지에 관심이 있습니다. 구현 아이디어에 대한 간략한 소개와 돔이 첨부되어 있는데 다행히 구현이 되었네요. 구체적인 내용은

텍스트

100장 30장 빨간 봉투

 

50위안짜리 빨간 봉투 13개

 

블록당 빨간 봉투 10개

다음 조건을 충족해야 합니다. 빨간 봉투 발행

1. 총액은 변함이 없습니다
2. 각각의 빨간 봉투에는 돈이 있어야 합니다
3. 빨간 봉투 집기

구현 아이디어
우선, 가장 작은 단위를 결정해야 합니다. 여기서는 분 단위로 정확합니다. 여기서 계산을 위해 int 유형을 사용하고 결과는 모두 int 유형입니다
2. 데이터는 균일합니다. 여기서는 1 3. 남은 처리량은 데이터가 평균 20개의 빨간색 봉투를 제공할 때 총 금액과 달라야 하며 이때 더 많은 금액을 환불해야 합니다. 총액보다 적다면 빨간 봉투의 양이 많은 쪽이 줄이세요. (총액/총 인원수) 아직 남은 금액이 있으면 두 번째로 많은 쪽이 줄이세요.
4. 순서를 잘 섞어서 친구들이 빨간 봉투가 순서대로 있는 것을 발견할 수도 있으니, 이를 방해하는 함수를 작성하면 됩니다.   

데모

/// <summary>
 /// 抢红包
 /// </summary>
 /// <param name="money"></param>
 /// <param name="num"></param>
 /// <returns></returns>
 public List<int> qhb(int money, int num)
 {
  int min = 1;
  int pjs = money / num;
  List<int> list = new List<int>();
  Random rnd = new Random();
  for (int i = 0; i < num; i++)
  {
  int max = (money / (num - i)) * 2;
  int s = rnd.Next(min, max);
  s = checkmoney(s, min, max);
  list.Add(s);
  money -= s;
  }
  //前面数据都是合理的,结尾必须多退少补
  list = checklist(money, pjs, list);
  return list;
 }
/// <summary>
 /// 余数处理
 /// </summary>
 /// <param name="money"></param>
 /// <param name="list"></param>
 /// <returns></returns>
 public List<int> checklist(int money, int pjs, List<int> list)
 {
  if (money != 0)
  {
  if (money > 0)
  {

   List<int> list_order = maopao(list);
   //给最小
   if (money / pjs == 0)
   {   
   list_order[0] += money;
   }
   else
   {
   for (int i = 0; i < money / pjs + 1; i++)
   {
    if (i == money / pjs)
    {
    list_order[i] += (money - (money / pjs) * pjs);
    }
    else
    {
    list_order[i] += pjs;
    }

   }
   }
   return list_order;
  }
  else
  {

   List<int> list_order = maopao(list,"desc");
   //给最大
   if (money / pjs == 0)
   {

   list_order[0] += money;
   }
   else
   {
   for (int i = 0; i < -(money / pjs) + 1; i++)
   {
    if (i == -(money / pjs))
    {
    list_order[i] += (money - (money / pjs) * pjs);
    }
    else
    {
    list_order[i] -= pjs;
    }

   }
   }
   return list_order;
  }
  }
  return list;
 }
 /// <summary>
  /// 冒泡排序
  /// </summary>
  /// <param name="list"></param>
  /// <param name="order"></param>
  /// <returns></returns>
  public List<int> maopao(List<int> list,string order = "asc")
  {
  if (order != "asc")
  {
   for (int i = 0; i < list.Count; i++)
   {
   for (int j = 0; j < list.Count - i - 1; j++)
   {
    if (list[j + 1] > list[j])
   {
    int temp = list[j];
    list[j] = list[j + 1];
    list[j + 1] = temp;
 
    }
   }
   }
  }
  else 
  {
   for (int i = 0; i < list.Count; i++)
   {
   for (int j = 0; j < list.Count-i-1;j++)
   {
    if (list[j+1] < list[j])
    {
    int temp = list[j];
    list[j] = list[j+1];
    list[j+1] = temp;

   }
   }
  }
  }
  return list;
 }
/// <summary>
 /// 打乱顺序
  /// </summary>
  /// <param name="list"></param>
  /// <returns></returns>
 public List<int> suiji(List<int> list) 
  {
  Random rnd = new Random();
  for (int i = 0; i < list.Count; i++)
  {
   int temp = list[i];
   int j = rnd.Next(0, list.Count-1);
   list[i] = list[j];
   list[j] = temp;
  }
  return list;
 }

위 내용은 WeChat 빨간 봉투 잡기 코드 예제의 ASP.NET 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.