废话不多说,上代码
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include<malloc.h>
int randbetweenminmax(int min, int max)//int表示函数返回值为整数
{
int r = rand() % (max - min + 1) + min;
return r;
}
int randbetweenminmaxIncomplete(int min, int max,int num)//两个数中随机整数,包含选取的数 { min < ??? < max }
{
int r;
while (1)
{
r = rand() % (max - min + 1) + min;
if (r == num)
continue;
else
break;
}
return r;
}
//变量
int(*p)[9] = (int(*)[9])malloc(40320 * 9 * sizeof(int));
int* q = *p;
int arraynum = 0;
int ninenumarray[9];
int isnewarrayok, isninenumarrayok;
int i, j;
//随机生成1~9不重复数组
void RandomlyGenerateArrays()
{
for (j = 0; j <= 8; j++)
{
isninenumarrayok = 0;
while (isninenumarrayok == 0)
{
ninenumarray[j] = randbetweenminmax(1, 9);
for (i = 0; i < j; i++)
{
if (ninenumarray[i] == ninenumarray[j])
{
break;
}
}
if (i == j)
{
isninenumarrayok = 1;
}
}
}
}
//随机生成1~9,中间是5的不重复数组
void RandomlyGenerateArraysIncomplete()
{
for (j = 0; j <= 8; j++)
{
if (j == 5)
{
ninenumarray[4] = 5;
}
isninenumarrayok = 0;
while (isninenumarrayok == 0)
{
ninenumarray[j] = randbetweenminmaxIncomplete(1,9,5);
for (i = 0; i < j; i++)
{
if (ninenumarray[i] == ninenumarray[j])
{
break;
}
}
if (i == j)
{
isninenumarrayok = 1;
}
}
}
}
//排除完全相同的数组
void LdenticalArray() {
for (i = 0; i < arraynum; i++)
{
int t = 0;
for (j = 0; j <= 8; j++)
{
if (p[i][j] == ninenumarray[j])
{
t++;
}
}
if (t == 9)
break;
}
if (i == arraynum)
{
isnewarrayok = 1;
}
}
//行求和
int row(int *p, int x)
{
int r = 0;
if (
(p[9 * x + 0] + p[9 * x + 1] + p[9 * x + 2] == p[9 * x + 3] + p[9 * x + 4] + p[9 * x + 5])
&&
(p[9 * x + 6] + p[9 * x + 7] + p[9 * x + 8] == p[9 * x + 3] + p[9 * x + 4] + p[9 * x + 5])
)
r = 1;
return(r);
}
//列求和
int line(int *p, int x)
{
int r = 0;
if (
(p[9 * x + 0] + p[9 * x + 3] + p[9 * x + 6] ==p[9 * x + 1] + p[9 * x + 4] + p[9 * x + 7])
&&
(p[9 * x + 2] + p[9 * x + 5] + p[9 * x + 8]== p[9 * x + 1] + p[9 * x + 4] + p[9 * x + 7])
)
r = 1;
return(r);
}
//斜线求和
int diagonal(int* p, int x)
{
int r = 0;
if (
(p[9 * x + 0] + p[9 * x + 4] + p[9 * x + 8] == p[9 * x + 2] + p[9 * x + 4] + p[9 * x + 6])
)
r = 1;
return(r);
}
int main()
{
while (arraynum <40320)
{
isnewarrayok = 0;
while (isnewarrayok == 0)
{
RandomlyGenerateArraysIncomplete();
LdenticalArray();
}
for (j = 0; j <= 8; j++)
{
p[arraynum][j] = ninenumarray[j];
}
arraynum++;
}
int t = 0;
for (i = 0; i < 40320; i++)
{
if (row(*p, i) && line(*p, i) && diagonal(*p, i))
{
t++;
for (j = 0; j < 9; j++)
{
printf("%5d",p[i][j]);
if ((j + 1) % 3 == 0) printf("\n");
}
printf(" 成功的次数:%5d\n\n", t);
}
}
free(q);
return 0;
}
小白一枚,欢迎大神指错纠正,一起交流进步