数学中的数学
问题是这样的:生成一个文件,每行 7 个数,每个数都小于100,大于 9 的原样显示,小于或等于9的在数的前面加个"0" 即如:02 03 12 15 每两个数间有一个空格隔开,且新生成的不能和原来生成的任意一组一样,
我的机子每次几乎要死机,,,都得几十分钟运行,,,大家帮我优化一下,另给程序也行,,
看下面我的小程序
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <algorithm>
using namespace std;
typedef struct Elem
{
int elem[7];
Elem* Next;
}Elem_A;
void main( void )
{
Elem_A *p1,*p2,*p3,*p4;
p1 = new struct Elem;
p1->Next = NULL;
p2 = p1;
p3 = p1;
p4 = NULL;
int i0,i1,i2,i3,i4,i5,i6;
FILE* file;
file = fopen("G:\\a.txt", "w+");
srand( (unsigned)time( NULL ) );
int a[7] = {0};
for( i0 = 0; i0 < 6; i0++ )
{
for( i1 = 0; i1 < 6; i1++ )
{
for( i2 = 0; i2 < 6; i2++ )
{
for( i3 = 0; i3 < 6; i3++ )
{
for( i4 = 0; i4 < 6; i4++ )
{
for( i5 = 0; i5 < 6; i5++ )
{
for( i6 = 0; i6 < 6; i6++ )
{
a[0] = rand()%100; a[1] = rand()%100; a[2] = rand()%100; a[3] = rand()%100; a[4] = rand()%100; a[5] = rand()%100; a[6] = rand()%100; for(int i7 = 0; i7 < 7; i7++) { for(int i8 = i7+1; i8 < 7; i8++) { if(a[i7] == a[i8]) { goto LOOP; } } }
sort(a,a+7); p4 = p3; while (p4->Next !=NULL) { int m_iCount = 0; for(int k = 0; k < 7; k++) { for(int k1 = 0; k1 < 7; k1++) { if(p4->elem[k] == a[k1]) { m_iCount++; } }
}
if (m_iCount > 5)
{ goto LOOP;
}
p4 = p4->Next;
}
for(int i9 = 0; i9 < 7; i9++)
{
int X = 0;
if (a[i9]>9)
{
fprintf(file, "%-3d", a[i9] );
}
else
{
fprintf(file, " %d%-2d", X,a[i9] );
}
p1->elem[i9] = a[i9];
}
p1 = new struct Elem;
p1->Next = NULL;
p2->Next = p1;
p2 = p2->Next;
fprintf(file, "\n");
}
LOOP:;
}
}
}
}
}
}
p4 = p3;
while (p4->Next !=NULL)
{
p3 = p3->Next;
delete p4;
p4 = p3;
}
}