求for语句代码的注释,见问号部分,谢谢
求for语句代码的注释,见问号部分,多谢。
------解决思路----------------------
不过建议不要无限循环 比如
------解决思路----------------------
每次抽出一张牌
1. 判断抽出的牌是否曾经抽出过,以前没抽到过的算有效
2. 判断有效的是否52张了,也就是所有牌都抽到过了(洗牌完成)
/*
题目:编码实现对一副扑克(52张)的洗牌程序, 并打印出来
时间:2013年5月8日 星期三
目的:
功能:
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
//黑桃:spade,红心:hearts,梅花:flower,方块:diamonds
char* poker[52] = //指针数组,定义了52个指针。
{
"S2","S3","S4","S5","S6","S7","S8","S9","S10","SJ","SQ","SK","SA",
"H2","H3","H4","H5","H6","H7","H8","H9","H10","HJ","HQ","HK","HA",
"F2","F3","F4","F5","F6","F7","F8","F9","F10","FJ","FQ","FK","FA",
"D2","D3","D4","D5","D6","D7","D8","D9","D10","DJ","DQ","DK","DA",
};
int number[52];
int i = 0;//获取随机数 存储至数组number中,i为下标。
//time_t t;//time_t中储存的是从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。
//所定义的biggest为0x 07 FF FF FF,换算为十进制是134217727,134217727秒÷60(秒/分)÷60(分/小时)÷24(小时/天)÷365(天/年)约为4.256年,因此最后结果为1974年。
srand((unsigned)time(NULL));//使用当前时间作为随机数种子来获取真正的随机数
for (;;)//while (true)
{
int temporay = rand() % 52;//0-51随机数字。
bool result = false;//是否取过
for (int j = 0; j < i; j++)
{
if (temporay == number[j])//??????????????
{
result = true;
break;
}
}
if (result == false)//??????????
{
number[i++] = temporay;
}
if (i == 52)//??????????
{
break;
}
}
//输出扑克牌,每13张换行一次
for (int k = 0; k < 52; k++)
{
if (k % 13 == 0)
{
printf("\n");
}
printf("%s ", poker[number[k]]);//输出所有花色扑克。
}
printf("\n");
return 0;
}
/*
在VC2010里的输出结果:
————————————————————————
SA SK S10 D5 HA DK HQ S6 H8 F8 SJ S9 FK
F4 S4 DA S2 HK F2 H3 F9 D10 H4 F5 D9 SQ
F6 D7 H9 S3 D4 DJ H2 D3 H6 FJ S7 H5 FQ
S8 F10 DQ F7 HJ D6 D8 S5 D2 FA F3 H10 H7
请按任意键继续. . .
————————————————————————
*/
------解决思路----------------------
for (;;)//while (true)
{
int temporay = rand() % 52;//0-51随机数字。
bool result = false;//是否取过
for (int j = 0; j < i; j++)
{
if (temporay == number[j])//遍历已经选出的i张牌,检查与当前的随机牌是否相同
{
result = true;
break;
}
}
if (result == false)//已选的牌没有于当前重复的
{
number[i++] = temporay;
}
if (i == 52)//总选出的牌数达到52
{
break;
}
}
不过建议不要无限循环 比如
int number[52];
bool selected[52];
srand((unsigned)time(NULL));
for (int i = 0; i < 52; ++i)
{
int temp = rand() % 52;
while (selected[temp]) {
++temp;
if (temp >= 52) {
temp -= 52;
}
}
number[i] = temp;
selected[temp] = true;
}
------解决思路----------------------
每次抽出一张牌
1. 判断抽出的牌是否曾经抽出过,以前没抽到过的算有效
2. 判断有效的是否52张了,也就是所有牌都抽到过了(洗牌完成)