欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)搶紅包算法

 更新時間:2020年09月25日 08:44:28   作者:LSC的博客  
這篇文章主要為大家詳細介紹了C語言搶紅包算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)搶紅包的具體代碼,供大家參考,具體內(nèi)容如下

1、算法背景:

大家知道,微信拼手氣紅包和普通紅包兩種。普通紅包每個人搶到的金額是固定的(總額的平均數(shù)),拼手氣紅包是隨機金額(每個人搶到的是隨機的,差別可能非常大,有的人搶到的是1分,有的搶到的可能是幾元、十幾元、幾十元),目前的搶紅包算法只能輸入兩個參數(shù),即總金額、總?cè)藬?shù)。

2、算法要求:

現(xiàn)要求同學(xué)們設(shè)計一個改進的搶紅包算法,可以設(shè)定總金額(total)、總?cè)藬?shù)(num)、搶到的最低金額(min)和最高金額(max),這樣就可以控制每個搶紅包的,搶到的不會太少,也不會太多。

(1)先用自然語言給出算法設(shè)計的思想:

第一步:輸入紅包金額總金額,紅包個數(shù),紅包金額最低/最高額度。

第二步:判斷帶輸入數(shù)據(jù)是否滿足算法要求,不滿足輸出提示信息,并重新輸入數(shù)據(jù)。

第三步:生成一個隨時紅包金額

第四步:判斷紅包金額是否滿足條件,如果滿足,繼續(xù)生成下一個紅包金額,如果不滿足在
此生成新的隨機紅包金額,知道滿足條件。

第五步:輸出搶紅包的過程信息

(2)進行異常檢查與處理;

(3)給出C語言源代碼實現(xiàn),運行結(jié)果展示;

源代碼如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void input();
int range_random_price(int start_price, int end_price);
void redPackets(double Total, int num, double Min_price, double Max_price);

int maxx = 0, maxx_index = -1;

int main()
{
 input();
 return 0;
}


// 數(shù)據(jù)輸入
void input()
{
 double total;
 int num;
 double min_price, max_price;

 printf("請輸入以下數(shù)據(jù):\n");
 printf("紅包總金額: ");
 scanf("%lf", &total);
 putchar('\n');
 printf("紅包數(shù)量: ");
 scanf("%d", &num);
 putchar('\n');
 printf("紅包最低金額: ");
 scanf("%lf", &min_price);
 putchar('\n');
 printf("紅包最高金額: ");
 scanf("%lf", &max_price);
 putchar('\n');
 redPackets(total, num, min_price, max_price);
}

// 生成(a, b) 之間的隨機數(shù)
int range_random_price(int start_price, int end_price)
{
 return rand()%(end_price-start_price+1) +start_price;
}

// total :總金額(元) num:人的個數(shù) min_price max_price :最低/最高金額
void redPackets(double Total, int num, double Min_price, double Max_price)
{
 // 剛開始金額全部擴大100倍轉(zhuǎn)變成整數(shù),最后輸出的再除以一百,轉(zhuǎn)變?yōu)楦↑c數(shù)
 int total = (int)Total*100;
 int min_price = (int)Min_price*100;
 int max_price = (int)Max_price*100;

 if((total*1.0 / num) - min_price*1.0 < 1e-9)
 {
  printf("您輸入的總金額過小,或者搶的紅包金額最低限度過大,請重新輸入\n");
  input();
  return ;
 }
 printf("搶紅包結(jié)果如下:\n");

 for(int i = 1; i < num; i++)
 {
  int random_price;
  while(1)
  {
   random_price = range_random_price(min_price, max_price);
   //判斷剩下的金額是否滿足條件
   if((total - random_price)*1.0 / (num - i) - min_price*1.0 >= 1e-9)
    break;
  }

  if(maxx < random_price)
   maxx = random_price, maxx_index = i;
  total -= random_price;// 剩余金額
  printf("第 %d 個人搶到的紅包金額為 %.2f, 紅包剩余金額為 %.2f\n", i, (double)(random_price/100.0), (double)(total/100.0));
 }


 if(maxx < total)
  maxx = total, maxx_index = num;

 // 輸出最后一個人的紅包金額
 printf("第 %d 個人搶到的紅包金額為 %.2f, 紅包剩余金額為 0.00\n", num, (double)(total/100.0));

 printf("運氣王是 %d 號\n", maxx_index);
}

程序運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++線程池實現(xiàn)代碼

    C++線程池實現(xiàn)代碼

    C++11中,線程我們可以理解為對應(yīng)一個thread對象,任務(wù)可以理解為要執(zhí)行的函數(shù),通常是耗時的函數(shù)。線程過多或者頻繁創(chuàng)建和銷毀線程會帶來調(diào)度開銷,進而影響緩存局部性和整體性能
    2021-12-12
  • C++中自定義sleep、條件變量sleep實例

    C++中自定義sleep、條件變量sleep實例

    這篇文章主要介紹了C++中自定義sleep、條件變量sleep實例,本文直接給出實例代碼并講解了功能作用和使用方法,需要的朋友可以參考下
    2015-03-03
  • 全面解析C++中的new,operator new與placement new

    全面解析C++中的new,operator new與placement new

    以下是C++中的new,operator new與placement new進行了詳細的說明介紹,需要的朋友可以過來參考下
    2013-09-09
  • 深入了解C語言的動態(tài)內(nèi)存管理

    深入了解C語言的動態(tài)內(nèi)存管理

    所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文將用5600字帶你深入了解動態(tài)內(nèi)存管理,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • C/C++ assert()函數(shù)用法案例總結(jié)

    C/C++ assert()函數(shù)用法案例總結(jié)

    這篇文章主要介紹了C/C++ assert()函數(shù)用法案例總結(jié),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++產(chǎn)生隨機數(shù)的幾種方法小結(jié)

    C++產(chǎn)生隨機數(shù)的幾種方法小結(jié)

    本文主要介紹了C++產(chǎn)生隨機數(shù)的幾種方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C++實現(xiàn)四則運算器(帶括號)

    C++實現(xiàn)四則運算器(帶括號)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)四則運算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • c++ string的erase刪除方法

    c++ string的erase刪除方法

    這篇文章主要介紹了c++ string的erase刪除方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++map,set,multiset,multimap詳細解析

    C++map,set,multiset,multimap詳細解析

    在C++標(biāo)準(zhǔn)模板庫(STL)中,容器分為關(guān)聯(lián)式容器和序列式容器兩大類,關(guān)聯(lián)式容器主要包括set、map、multiset和multimap,通過索引來訪問元素,本文給大家介紹C++?map,set,multiset,multimap的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • c++中map容器的使用詳解

    c++中map容器的使用詳解

    這篇文章主要介紹了c++中map容器的使用詳解,C++中map容器提供一個鍵值對容器,map與multimap差別僅僅在于multiple允許一個鍵對應(yīng)多個值,需要的朋友可以參考下
    2023-08-08

最新評論