📄 素数方阵原代码.c
字号:
if(a>0)
{for(i=1;i<=a;i++)
{if(r==Re11(aa[i])&&A[5][5]==Re15(aa[i]))
{A[2][2]=Re12(aa[i]);
A[3][3]=Re13(aa[i]);
A[4][4]=Re14(aa[i]);
Row5();
}
}
}
}
/*-------------------------------------------------------------*/
/*函数名称:Row5()
创建者:唐淑娟
创建时间:2006年4月17
最后的修改时间:2006年4月20
函数功能的描叙:得到方阵第五行的元素
函数调用前的预备条件:Saving()函数
函数的抽象算法:采用穷举法,从前面的辅助数组中取数,因为素数的结尾是1,
3,7,9,所以从bb[200]中取数,并调用Re11(long),Re12(long),Re13(long),
Re14(long),Re15(long)将其返回值赋予第五行,同时调用Diagona12()处理
副对角线及2,4列和第3行.*/
int Row5()/*得到方阵第五行的元素*/
{
int i;/*循环变量*/
for(i=1;i<=b;i++)
{if(A[5][5]==Re15(bb[i]))
{A[5][1]=Re11(bb[i]);
A[5][2]=Re12(bb[i]);
A[5][3]=Re13(bb[i]);
A[5][4]=Re14(bb[i]);
Diagonal2();
}
}
}
/*-------------------------------------------------------------*/
/*函数名称:Diagonal2()
创建者:唐淑娟
创建时间:2006年4月17
最后的修改时间:2006年4月28
函数功能的描叙:得到方阵的副对角线,2,4列及第3行
函数调用前的预备条件:Saving()函数
函数的抽象算法:采用穷举法,从前面的辅助数组中取数并调用Re11(long),
Re12(long),Re13(long),Re14(long),Re15(long)将其返回值赋予所求*/
int Diagonal2()/*处理副对角线,4,2列及第三行*/
{int i,j,k,l;/*i,j,k做循环变量*/
/*副对角线*/
for(i=1;i<=a;i++)
{if(A[5][1]==Re11(aa[i])&&A[3][3]==Re13(aa[i])&&A[1][5]==Re15(aa[i]))
{A[4][2]=Re12(aa[i]);
A[2][4]=Re14(aa[i]);
for(j=1;j<=a;j++)/*第2列*/
{if(A[1][2]==Re11(aa[j])&&A[2][2]==Re12(aa[j])&&A[4][2]==Re14(aa[j]))
if(A[5][2]==Re15(aa[j]))
{A[3][2]=Re13(aa[j]);
for(k=1;k<=a;k++)/*第4列*/
{if(A[1][4]==Re11(aa[k])&&A[2][4]==Re12(aa[k])&&A[4][4]==Re14(aa[k]))
if(A[5][4]==Re15(aa[k]))
{A[3][4]=Re13(aa[k]);
for(l=1;l<=a;l++)/*第3行*/
{if(A[3][2]==Re12(aa[l])&&A[3][3]==Re13(aa[l])&&A[3][4]==Re14(aa[l]))
if(A[3][5]==Re15(aa[l]))
{A[3][1]=Re11(aa[l]);
Mixture1();
}
}
}
}
}
}
}
}
}
/*-------------------------------------------------------------*/
/*函数名称:Mixture1()
创建者:唐淑娟
创建时间:2006年4月17
最后的修改时间:2006年4月28
函数功能的描叙:得到方阵的第1列,2,4行和第三列
函数调用前的预备条件:Saving()函数
函数的抽 象算法:采用穷举法,从前面的辅助数组中取数,并调用Re11(long),
Re12(long),Re13(long),Re14(long),Re15(long)将其返回值赋予所求*/
int Mixture1()/*处理第一列和第2,4行及第三列*/
{int i,j,k;/*循环变量*/
int y3;
unsigned long int sy3;
/*第一列*/
for(i=1;i<=c;i++)
{if(r==Re11(cc[i])&&A[3][1]==Re13(cc[i])&&A[5][1]==Re15(cc[i]))
{A[2][1]=Re12(cc[i]);
A[4][1]=Re14(cc[i]);
for(j=1;j<=a;j++)/*第2行*/
{if(A[2][1]==Re11(aa[j])&&A[2][2]==Re12(aa[j])&&A[2][4]==Re14(aa[j]))
if(A[2][5]==Re15(aa[j]))
{A[2][3]=Re13(aa[j]);
for(k=1;k<=a;k++)/*第4行*/
{if(A[4][1]==Re11(aa[k])&&A[4][2]==Re12(aa[k])&&A[4][4]==Re14(aa[k]))
if(A[4][5]==Re15(aa[k]))
{A[4][3]=Re13(aa[k]);
y3=A[1][3]+A[2][3]+A[3][3]+A[4][3]+A[5][3];/*第三列*/
sy3=A[1][3]*10000+A[2][3]*1000+A[3][3]*100+A[4][3]*10+A[5][3];
if(s==y3&&prime(sy3)==1)
{ printf("打印如下:\n");
print();
printf("请按任何键,以便于查看下一个符合条件的答案!\n");
getch();
flag++;
}
}
}
}
}
}
}
}
/*--------------------------------------------------------------*/
/*函数名称: print()
创建者:唐淑娟
创建时间:20006年4月15日
最后的修改时间:2006年4月20日
函数功能的描述:打印出符合条件的方阵*/
int print()/*打印一个方阵*/
{int i,j;/*i作为行,j作为列*/
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
{
printf("%-8d",A[i][j]);
if(j==5)
printf("\n\n");
}
}
/*-------------------------------------------------------------*/
/*函数名称:main()
创建者:唐淑娟
创建时间:2006年4月7日
最后的修改时间:2006年4月21日
函数的功能描叙:找出所有的和等于s并且以r作为首元素的方阵,其中r和s
从键盘由用户输入,方阵的每行,每列及2条对角线均为和为s的素数
函数的抽象算法:采用模块化程序结构的原理,利用辅助数组保存10000到
99999之间的所有素数,然后采用穷举法找出符合要求的数组并打印出结果*/
/*-------------------------------------------------------------*/
int main()/*主函数*/
{char choice;
textbackground(BLUE);/*为我的界面设计自己喜欢的底色*/
textcolor(10);/*为我的文字设计颜色*/
clrscr();/*清除原来的颜色*/
/*cprintf("欢迎使用窗口!\n");*/
window(1,1,80,25);/*设计我的窗口为全屏*/
printf("\t\t\t欢迎进入素数方阵求解系统\n");
printf("\t\t\t\t\t----->设计者:04计2唐淑娟(2004182534)\n");
printf("-------------------------------------------------------------------\n");
printf("p.素数方阵求解. h.帮助.\n");
printf("0.退出本系统.\n");
printf("-------------------------------------------------------------------\n");
printf("请选择:<按'p'进入<素数方阵求解>,按'h'进入<帮助>,按'0'<退出系统>!>\n");
do
{
choice=getchar();
switch(choice)
{
case'p':
phalanx();
break;
case'h':
help();
break;
case'0':
printf("谢谢使用本系统,Goodbye!");
exit(0);
default:
break;
}
}
while(1);
}
/*-------------------------------------------------------------*/
/*函数名称:phalanx()
创建者:唐淑娟
创建时间:2006年4月21日
最后的修改时间:2006年4月26日
函数功能的描叙:求解素数方阵问题
函数调用前的预备条件:Saving(),Row1()函数
函数的抽象算法:采用模块化程序结构的原理,调用前面的函数,采用穷举法找出符合要求
的数组并打印出结果,为了方便用户,我在界面上加了提示.*/
int phalanx()/*求解素数方阵问题*/
{int i,j,k;
printf("请输入一个整数r大小在<1到9>之间:\n");
scanf("%d",&r);
printf("请输入一个整数s大小在<5到45>之间:\n");
scanf("%d",&s);
while(r>=1&&r<=9&&s>=5&&s<=45)
{ Saving();
Row1();
if(flag==0)
{ printf("Soory,您输入的数字没有找到符合条件的解!\n");
printf("----------------------------------------------------->\n");
}
else
{ printf("一共找到了%d个解!\n",flag);
printf("----------------------------------------------------->\n");
flag=0;
}
for(i=1;i<=1000;i++)/*给前面的全局数组及统计变量赋0*/
aa[i]=0;
for(j=1;j<=200;j++)
bb[j]=0;
for(k=1;k<=500;k++)
cc[k]=0;
a=0;
b=0;
c=0;
printf("请输入一个整数r大小在1到9之间:\n");
scanf("%d",&r);
printf("请输入一个整数s大小在5到45之间:\n");
scanf("%d",&s);
}
printf("输入的数字不符合要求!请从新选择你的操作!\n");
printf("----------------------------------------------------->\n");
printf("请重新选择<按'p'进入<素数方阵求解>,按'h'进入<帮助>,按'0'<退出系统>!\n");
}
/*-------------------------------------------------------------*/
/*函数名称:help()
创建者:唐淑娟
创建时间:2006年4月21日
最后的修改时间:2006年4月26日
函数功能的描叙:给用户提供操作帮助*/
int help()/*给用户提供操作帮助*/
{
printf("按'p'进入<素数方阵求解>,按'h'进入<帮助>,按'0'<退出系统>!\n");
}
/*-------------------------------------------------------------*/
/*备注;因为采用穷举的方法,所以效率不是很高,在输入的数字如果有很多种情况但是并
不一定符合题意,在我的机器上运行的话就会出现漫长的等待的现象!我的程序是在Turbo
c for windows 6.0集成环境下编译的.*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -