C語言發13張不重復的牌,怎么辦,求程式
uj5u.com熱心網友回復:
大概這樣子吧
#include <stdbool.h> //引入bool型別
bool chachong(int *arr, int index, size_t n)
{
if (!index || !n) //忽略0值和第一個值
{
return true;
}
while (n) //從陣列中找重復的值
{
if (arr[n - 1] == index)
{
return true;
}
n--;
}
return false;
}
////////////////
int arr[13] = {0};
size_t i=0;
while (i < 13)
{
do
{
arr[i] = rand() % 55;
} while (chachong(arr, arr[i], i));
i++;
}
uj5u.com熱心網友回復:
隨機必然有重復,所謂“不重復的隨機”實際上是洗牌。洗牌演算法參考下面:#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
srand(time(NULL));
printf("shuffle 0..n-1 demo\n");
for (n=1;n<=5;n++) {/* 測驗1~5個元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j為n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 測驗n*2*n!次 */
for (i=0;i<n;i++) d[i]=i;/* 填寫0~n-1 */
for (i=n;i>0;i--) {/* 打亂0~n-1 */
a=i-1;b=rand()%i;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=0;i<n;i++) printf("%d",d[i]);
printf("\n");
}
}
printf("shuffle 1..n demo\n");
for (n=1;n<=5;n++) {/* 測驗1~5個元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j為n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 測驗n*2*n!次 */
for (i=1;i<=n;i++) d[i]=i;/* 填寫1~n */
for (i=n;i>1;i--) {/* 打亂1~n */
a=i;b=rand()%i+1;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=1;i<=n;i++) printf("%d",d[i]);
printf("\n");
}
}
}
uj5u.com熱心網友回復:
隨機打亂順序后直接給前面的即可轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/281780.html
標籤:C語言
上一篇:【主題配色】CodeBlocks
