巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数

编程入门 行业动态 更新时间:2024-10-04 13:22:46

巧排<a href=https://www.elefans.com/category/jswz/34/1771323.html style=数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数"/>

巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数

巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。

排序方法:以贪心算法进行搜索,由于两个数字之和是一个素数,且首尾两数字之和也为一个素数,因此只需要找出以1开头的排列就可以了。使用贪心算法的同时使用回溯法,当遇到相邻两个数的时候就回溯到上一步从新搜索。

ofstream fout("D://Prime.txt",ios::app);
bool ISPrime(int n)
{for(int i=2;i<=sqrt((double)n);i++)if(n%i==0)return false;return true;
}
void PrimeArrange(int *arr,int begin,int length)
{if(begin==length){if(ISPrime(arr[begin-1]+arr[0])){copy(arr,arr+length,ostream_iterator<int,char>(fout,"  "));fout<<"\n";cout<<endl;}return;}else if(begin>1&&!ISPrime(arr[begin-1]+arr[begin-2]))//截枝和回溯{return;}else{for(int i=begin;i<length;i++){swap(arr[begin],arr[i]);PrimeArrange(arr,begin+1,length);//搜索swap(arr[begin],arr[i]);}}
}
void PrimeArrange(int *arr,int length)
{if(arr==NULL||length<=0){return;}PrimeArrange(arr,1,length);
}int main()
{int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};PrimeArrange(a,20);fout.close();cout<<"结束"<<endl;return 0;
}

部分结果如下(结果集太大)



更多推荐

巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数

本文发布于:2024-02-14 01:16:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1761321.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数字   素数   之和   两个

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!