69,371
社区成员
发帖
与我相关
我的任务
分享
#define MAX_NUM 4095 // 总和
#define NUM 16 // 随机数总个数
#define BLOCK 5 // 分的块数,如果觉得随机数不均匀,可以调大块数
int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned)time(0));
int num = MAX_NUM;
int numPerBlock = NUM/BLOCK;
int test = 0; // 测试随机结果是否正确
for (int k = 0; k < BLOCK; ++k)
{
int n = MAX_NUM / BLOCK;
for (int i = 0; i < numPerBlock; ++i)
{
int nTemp = 0;
if (i == numPerBlock - 1 && NUM%BLOCK == 0)
{
nTemp = n;
}
else
nTemp = rand() % (n - (numPerBlock - i)+1) + 1;
printf("第%d个= %d\n", k*numPerBlock +i+1, nTemp);
test += nTemp;
n -= nTemp;
num -= nTemp;
}
}
// 处理余下的
for (int m = 0; m < NUM%BLOCK;++m)
{
int nTemp = 0;
if (m == NUM%BLOCK - 1)
{
nTemp = num;
}
else
nTemp = rand() % (num - (NUM%BLOCK -m) + 1) + 1;
printf("第%d个= %d\n", numPerBlock*BLOCK + m + 1, nTemp);
test += nTemp;
num -= nTemp;
}
test == MAX_NUM ?printf("随机结果正确!\n"):printf("随机结果有误!\n");
return 0;
}