编程java和python,java程序员学python
描述:在一个从1到N的N整数周围,添加任意两个相邻的数字。如果所有的结果都是素数,那么这个环就是素数环。
分析:用回溯算法检查所有可能的序列。然后根据剪枝(题目中的条件)筛选出可能的排列并输出。
包com.sa mudra.back跟踪;
导入Java . util . scanner;
班主任ing {
静态输入n;
输入一个[];静态;
静态计数;
publicstaticvoidmain(string[]args){
sannerin=new scanner(system . in;
n=in . nextint(;
count=0;
a=new int[n 1];
init(;
如果())N1)!=0}{
System.out.println(没有符合要求的方案!);
}否则{
搜索(1);
if(count==0)
System.out.println(没有符合要求的方案!);
}
}
公共语音初始化(
for(intI=0;我
a[I]=I;
}
}
publicstaticvoidsearch{
int I;
当检索到if(Mn )//叶节点时
{
if(is prime(a[1]a[n]))/if a[1]a[20]是素数
出;
打印结果(;//输出当前解决方案
}
}
其他
{
for(I=m;I=n;我//(和木))。
{
swap(m,I);切换a[m]和a[i]
if()m-1)==0 is prime(a[m]a[m-1]))判断a[m-1] a[m]是否为素数
搜索(m1;//递归查找下一个位置
swap(m,I);切换a[m]和a[i]
}
}
}
publicstaticvoidswap(intm,int i ) {
int tmp=a[m];
a[m]=a[I];
a[I]=tmp;
}
publicstaticbooleanisprime {
int I;
for(I=2;i * i=numI ) {
if(num%I==0))))))).
假的;
}
返回true
}
公共状态无效打印结果
System.out.print(这是第一个“计数”方案:);
for(intI=1;I=n;I ) {
system . out . print(a[I]);
}
system . out . println(;
}
}添加一个链接其他人的非递归java实现:
33558 cn.com/article/p-carszxzb-ez.html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。