现在的位置: 首页 > 综合 > 正文

基于visual Studio2013解决C语言竞赛题之1087数字变换

2014年03月22日 ⁄ 综合 ⁄ 共 1260字 ⁄ 字号 评论关闭





题目

解决代码及点评



/************************************************************************/
/* 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)选择工程

抱歉!评论已关闭.