#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
void SetColor(int fore , int back )
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (back << 4) + fore);
}
void product_value(unsigned result[], unsigned index)
{
unsigned value, i;
do
{
value = rand() % 33 + 1;
i = 0;
for (; i < index; i++)
{
if (value == result[i])
break;
}
} while (i < index);
result[i] = value;
}
void swap(unsigned* value1, unsigned* value2)
{
unsigned tmp = *value1;
*value1 = *value2;
*value2 = tmp;
}
unsigned Partition(unsigned data[], unsigned left, unsigned right)
{
if (left >= right) return;
unsigned base = data[left];
unsigned left_tmp = left, right_tmp = right;
while (left_tmp < right_tmp)
{
while (left_tmp < right_tmp && data[right_tmp] >= base)
{
--right_tmp;
}
while (left_tmp < right_tmp && data[left_tmp] <= base)
{
++left_tmp;
}
if(left_tmp != right)
swap(&data[left_tmp], &data[right_tmp]);
}
if(left != left_tmp)
swap(&data[left], &data[left_tmp]);
return left_tmp;
}
void QSort(unsigned data[], unsigned low, unsigned high) {
if (low < high) {
//找到支点的位置
int pivotloc = Partition(data, low, high);
//对支点左侧的子表进行排序
if (pivotloc != 0)
{
QSort(data, low, pivotloc - 1);
}
//对支点右侧的子表进行排序
QSort(data, pivotloc + 1, high);
}
}
void rand_product(unsigned seed)
{
srand(seed);
unsigned result[6];
for (unsigned i = 0; i < 6; i++)
{
product_value(result, i);
}
QSort(result, 0, 5);
for (size_t i = 0; i < 6; i++)
{
SetColor(7, 1);
printf_s("%02d", result[i]);
SetColor(7, 0);
printf_s(" ");
}
SetColor(7, 4);
printf_s("%02d", (rand() % 16 + 1));
SetColor(7, 0);
printf_s("\n");
}
int main(int argc, char* argv[])
{
int group_count = 1;
if (argc == 2)
{
int value = atoi(argv[1]);
if (value > 1) group_count = value;
}
else
{
printf_s("请输入双色球注数(>1):");
scanf_s("%d", &group_count);
if (group_count < 1)
{
printf_s("非法数据");
return 0;
}
}
static unsigned value = 0;
srand((unsigned int)time(NULL));
unsigned *group = (unsigned *)malloc(group_count*sizeof(unsigned));
if (NULL == group)
{
printf_s("分配内存失败!");
return 0;
}
for (size_t i = 0; i < group_count; i++)
{
value += rand() + 0x1000;
*(group+i) = value;
}
for (size_t i = 0; i < group_count; i++)
{
rand_product(group[i]);
}
free(group);
system("pause");
return 0;
}