/************************************************************************/ /* 85. 相邻数之和为素数。 将1,2,3,4,... ,19,20这20个自然数排成一圈,使每两个相邻数之和都为素数。问这20个数应如何排列? 这道题和字符串全排列有些类似 不同的是要加判断素数条件 这道题和字符串全排列有些类似 不同的是要加判断素数条件 因为数字较小所以把1-40的素数都排到一起了 */ /************************************************************************/ #include <stdio.h> #include <stdlib.h> void swap85(int& a,int& b) { int tmp = a; a = b; b = tmp; } bool IsAPrime85(int n) { static int prime[]={2,3,5,7,11,13,17,19,23,29,31,37};// 0-40以内的素数 for(int i=0;i<sizeof(prime)/sizeof(prime[0]);i++) if( n==prime[i] ) { return true; } return false; } int thearr[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; void print_it85(int n,int arr[]) { static int cnt = 0; printf("%04d : ",++cnt); for(int i=0;i<n;i++) printf("%2d ",arr[i]); printf("\n"); } void MySuShu85(int n,int time) { if( time==n ) { if( IsAPrime85(thearr[0]+thearr[n-1]) ) print_it85(n,thearr); return; } else { for(int i=time;i<n;i++ ) if( IsAPrime85(thearr[time-1]+thearr[i]) ) { swap85(thearr[time],thearr[i]); MySuShu85(n,time+1); swap85(thearr[time],thearr[i]); } } } void main() { MySuShu85(20,1); }
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
http://download.csdn.net/detail/yincheng01/6681845
解压密码:c.itcast.cn