⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 素数方阵原代码.c

📁 素数方阵系统,找出所有符合条件的素数方阵
💻 C
📖 第 1 页 / 共 2 页
字号:
 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 + -