最近关注了CSDN的程序员小灰,前两天发了个红包算法看着还蛮有意思的,自己使用C实现一下!(PS:后来才发现早已烂大街了……o(╥﹏╥)o)

规则:

1. 所有人抢到金额之和等于红包金额,不能超过,也不能少于
2. 每个人至少抢到一分钱
3. 要保证所有人抢到金额的几率相等

先做好准备:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()%x)

struct Node
{
    float Money;
    struct Node *Next;
};
typedef struct Node *List;

List CreateList();
void Add(float current, List *last);
int Find(int money, List L);
void Sort(List L);
void PrintList(List L);

void Algorithm1(float money, int num, List L);
void Algorithm2(float money, int num, List L);
void Algorithm3(float money, int num, List L);

int main()
{    
    List L= CreateList();
    //Algorithm1(100,10,L);
    //Algorithm2(100, 10, L);
    //PrintList(L);
    Algorithm3(100, 10, L);
}

List CreateList() {
    List L;
    L = (List)malloc(sizeof(List));        
    L->Next = NULL;
    return L;
}

void Add(float current,List *last) {
    List L = (List)malloc(sizeof(List));
    L->Money = current;
    L->Next = NULL;
    (*last)->Next = L;
    (*last) = L;
}

int Find(int money,List L) {
    List ptr = L->Next;
    while (ptr)
    {
        if (ptr->Money == money) {
            return 1;
        }
        ptr = ptr->Next;
    }
    return 0;
}

void Sort(List L) {    
    List cur = NULL, tail = NULL;
    cur= L->Next;

    while (cur->Next!=tail){
        int flag = 1;
        while (cur->Next != tail){
            if (cur->Money > cur->Next->Money) {
                float tmp = cur->Money;
                cur->Money = cur->Next->Money;
                cur->Next->Money = tmp;

                flag = 0;
            }
            cur = cur->Next;
        }
        if (flag) break;

        tail = cur;  //下一次遍历的尾结点是当前结点(仔细琢磨一下里面的道道)
        cur = L->Next;     //遍历起始结点重置为头结点    
    }
}

void PrintList(List L) {
    List ptr = L->Next;
    int i = 0;
    while (ptr)
    {
        printf("第%d人抽中金额:%.2f\n", ++i,ptr->Money);
        ptr = ptr->Next;
    }
}
View Code

相关文章:

  • 2021-10-29
  • 2021-08-11
  • 2021-06-03
  • 2021-11-03
  • 2022-02-08
  • 2022-12-23
猜你喜欢
  • 2022-01-22
  • 2022-12-23
  • 2021-10-31
  • 2022-12-23
  • 2022-03-09
  • 2021-07-07
相关资源
相似解决方案