通過案例淺談C++與Python的快速實現差別

2020-10-15 14:00:53

本文以中彩票問題入手,即15個元素(包含單個數位和字母)中依次取出4個元素,每次取出後不放回。彩票的獎金序列為隨意取定的4個元素(包含單個數位和字母)。要求程式返回中獎前執行的次數。
依據數學中的組合原理可知,中獎的概率為1/1365

先用Python寫出程式如下:

from random import choice
def doit():
loft=[0,2,3,5,‘k’,‘l’,‘u’,6,9,4,‘n’,1,7,‘q’,‘r’]
co=[]
for i in range(0,4):
temp = choice(loft)
loft.remove(temp)
co.append(temp)
return co
count=0
while True:
d=doit()
#print(d)
count=count+1
if (‘r’ in d) and (6 in d) and (0 in d) and (‘u’ in d):
print(f"The truth is {d}")
print(f"執行{count}次中獎 ")
break;
可以Python看到總共是18行,程式碼比較簡單緊湊,僅僅用了幾個列表亂數函數而已。
Python實現此問題
接下來是C++

#include
#include
#include
int n = 15;
using namespace std;
void thefour() {
int count = 0;
bool flag = false;
srand((unsigned int)time(NULL));
while (true) {
int arr[15] = { 48,50,51,53,107,97,117,54,57,52,110,56,55,113,114 };
int array[4] ;
int a[4] = {48,54,114,117};
n = 15;
for (int i = 0; i < 4; i++) {
int num = 0;
if (n != 0) {
num = rand() % n;
}
array[i] = arr[num];
int temp = num;
for (int i = 1; i <= n - 1 - temp; i++) {
arr[num] = arr[num+1];
num++;
}
n–;
}
for (int i = 1; i < 4;i++) {
for (int j = 3; j >= i; j–) {
if (array[j] < array[j - 1]) {
int it = array[j - 1];
array[j - 1] = array[j];
array[j] = it;
}
}
}
count++;
if (array[0]==a[0]&& array[1] == a[1]&& array[2] == a[2]&& array[3] == a[3]) {
flag = true;
}
if (flag == true) {
cout << "執行 " << count << 「次中獎」 << endl;
cout << "中獎的四個元素為: "<< " 0 6 r u " << endl;
break;
}
}
}
int main() {
thefour();
system(「pause」);
return 0;
}

可以看到C++大概是55行,
而且更重要的是,我還要從輪子造起,包括一個亂數種子,一個氣泡排序演演算法,一個陣列迴圈賦值演演算法。
C++實現案例