
题目
解决代码及点评
/************************************************************************/ /* 87. 在5条直径线的两端分别 9 3 放置1到10的顺序数,如右图所 示。但这样放置法只有一种情 8 4 况,两个相邻数之和等于相对 位置上的两个邻接数之和,即: 7 5 10+1=5+6 6 而 1+2≠6+7 2+3≠7+8 现请你变换一下这些数的位置,使任何两个相邻数之和等于相对位置上的两个邻接数之和,要求找出全部答案。 思路 定一半 则 全定 代码丑陋 但是时间上实际上要比递归快的多 恶心的一点是太硬 */ /************************************************************************/ #include <stdio.h> #include <stdlib.h> void main() { for(int i=1;i<11;i++) { for (int j=1;j<11;j++) { if (i==j) continue; for (int k=1;k<11;k++) { if (k==i||k==j) continue; for (int l=1;l<11;l++) { if (l==i||l==j||l==k) continue; for (int m=1;m<11;m++) { if (m==i||m==j||m==k||m==l) continue; for(int n=1;n<11;n++) { #pragma region 条件选择 if (n==i||n==j||n==k||n==l||n==m) continue; int arr[10]={0}; arr[i-1]=arr[j-1]=arr[k-1]=arr[l-1]=arr[m-1]=arr[n-1]=1; int num=i+j-n; if (num>0&&num<11&&arr[num-1]==0) { arr[num-1]=1; } else continue; int num1=j+k-num; if (num1>0&&num1<11&&arr[num1-1]==0) { arr[num1-1]=1; } else continue; int num2=k+l-num1; if (num2>0&&num2<11&&arr[num2-1]==0) { arr[num2-1]=1; } else continue; int num3=l+m-num2; if (num3>0&&num3<11&&arr[num3-1]==0) { arr[num3-1]=1; printf("%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d\n",i,j,k,l,m,n,num,num1,num2,num3); } else continue; #pragma endregion 条件选择 } } } } } } system("pause"); }
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果
代码下载
http://download.csdn.net/detail/yincheng01/6681845
解压密码:c.itcast.cn