TA的每日心情 | 开心 2014-6-18 08:29 |
---|
签到天数: 14 天 [LV.3]偶尔看看II
滴水大师
- 积分
- 2345
|
题目
解决代码及点评
- <pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code">/************************************************************************/
- /* 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 )
- {
- 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);
- 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) )
- {
- swap85(thearr[time],thearr);
- MySuShu85(n,time+1);
- swap85(thearr[time],thearr);
- }
- }
- }
-
- void main()
- {
- MySuShu85(20,1);
- }</pre><br><br><br></pre></pre></pre>
|
|