方法一
電腦解決實際問題常用資料類比和構造的方法。藉助於數組,資料類比和構造可以很方便地實現。
隨機產生撲克牌的思路:
1、定義字元數組,構造一副順序存放的新牌,包括花色與牌值。
2、根據隨機數把新牌打亂。
3、按數組分發新牌(根據規則顯示)。
代碼如下:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int i,j;
char ch1,ch2;
char s[104];/* 存放一副牌 */
char a[]="hdsc";/* 定義花色 */
/* 定義牌值 */
char b[14] = "akqj1098765432";
/* 產生一副新牌 */
for(i=0;i<4;i++)
{
for(j=0;j<13;j++)
{
s[2*j+26*i] = a[i];
s[2*j+26*i+1] = b[j];
}
}
randomize(); /* 初始化隨機數發生器 */
for(i=0;i<52;i++)
{
j = random(52-i);
ch1 = s[2*j]; /* 與最後一張牌交換花色 */
s[2*j] = s[102-2*i];
s[102-2*i] = ch1;
ch2 = s[2*j+1]; /* 與最後一張牌交換牌值 */
s[2*j+1] = s[103-2*i];
s[103-2*i] = ch2;
}
printf("nn");
for(i=0,j=0;i<104;i+=2,j++) /* 顯示大亂後新牌 */
{
if(!(j%13))
{
printf("nnn"); /* 13張牌為一組 */
}
printf(" %c%c",s[i],s[i+1]);
}
getch();
}
方法二
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <iostream>
// using namespace std;
int main()
{
const char *c = "0123456789abcdefghijklmnopqrstuvwxyz";
srand(static_cast<unsigned int>(time(null)));
std::cout << "the random char array is:";
for(int i = 0; i < 5; ++i)
{
std::cout << std::endl;
int index = 0 ;
for(int j = 0; j < 5; ++j)
{
index = rand() % strlen(c);
std::cout << c[index ]
<< c[index]
<< " ";
}
}
std::cout << std::endl;
return 0;
}
運行效果如下:
the random char array is:
00 qq 88 ii zz
qq bb oo 00 yy
rr yy tt ww ll
ss rr aa bb oo
11 yy tt 33 uu