题目

解决代码及点评

  1. /************************************************************************/
  2. /* 二)程序设计
  3. ⑴奇阶纵横图n=2m+1请见填写方法分析1)。  该程序在 数组23题已经完成
  4. ⑵偶阶纵横图n=2(2m+1)时,算法分析是把方阵划成A、B、C、D四个小子阵,
  5.   然后进行多次交换数字来完成,较麻烦,但可从中发现巧妙的规律,A、B、C、D子阵中各元素,
  6.   都可以由 A子阵中相对位置上的元素加上一个常数得到,如B~(u/2)2,C~2(u/2)2D~3(u/2)2,
  7.   只要按奇阶纵横图先填A子阵,而B、C、D子阵便可由A子阵演变而成。
  8. ⑶偶阶纵横图n=4m时,先用循环判断方阵中每一位置是否在对角线上,如在对角线上,则将该位置赋值为1,
  9.   否则,赋值为0。然后将X←0,Y←N*N+1,X、Y为行列值。
  10.   然后用二重循环(I,J)从1依次变化至n。若A[I][J]=1,则A[I][J]←Y,若A[I][J]=0, 则A[I][J]←X,循环结束即得n=4m的方阵。
  11.                                          */
  12. /************************************************************************/
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <math.h>
  16. void MF494(int arr[][8])
  17. 	{
  18. 	int num=8;
  19. 	int num1=num/4;
  20. 	int numB=num*num+1;
  21. 	for (int i=0;i<num;i++)
  22. 	{
  23. 		for (int j=0;j<num;j++)
  24. 		{
  25. 			if ((i+j)%4==3||abs(i-j)%4==0)
  26. 			{
  27. 				arr[i][j]=numB-i*num-j-1;
  28. 			}
  29. 			else
  30. 				arr[i][j]=i*num+j+1;
  31. 			printf("%3d",arr[i][j]);
  32. 		}
  33. 		printf("\n");
  34. 	}
  35. }
  36. //const int N=8;
  37. void  MF5()
  38. {	int k=2;
  39. 	int arr10[10][10]={0};
  40. #pragma region W
  41. 	{int a[5][5] = {0};
  42. 	int num = 1;
  43. 	int i = 0;
  44. 	int j = 5/2;
  45. 	int ci = 0;
  46. 	int cj = 0;
  47. 	while (1){
  48. 		a[i][j] = num++;        //将num当前数存入a[i][j];
  49. 		ci = i;					//保存i当前值;
  50. 		cj = j;					//保存j当前值;
  51. 		if (ci == 0)i = 5 - 1;	//判断上一个是否在第0行
  52. 		else i--;
  53. 		if (cj == 5 - 1){		//判断上一个是否在第N-1列
  54. 			j = 0;
  55. 			i = ci-1;
  56. 		}
  57. 		else j++;
  58. 		if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){		//判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
  59. 			i = ci+1;
  60. 			j = cj;
  61. 		}
  62. 		int flag = 0;
  63. 		for (int u = 0; u < 5; u++){				//判断矩阵是否已满
  64. 			int flag1 = 0;
  65. 			for (int v = 0; v < 5; v++){
  66. 				if (a[u][v] == 0){
  67. 					flag1 = 1;
  68. 					break;
  69. 				}
  70. 			}
  71. 			if (flag1 == 1){
  72. 				flag = 1;
  73. 				break;
  74. 			}
  75. 		}
  76. 		if (flag == 0)break;					//flag=0说明矩阵已经填满,跳出循环
  77. 	}
  78. 	for (int i=0;i<5;i++)
  79. 	{
  80. 		for(int j=0;j<5;j++)
  81. 		{
  82. 			arr10[i][j]=a[i][j];
  83. 		}
  84. 	}
  85. 	}
  86. #pragma endregion W
  87. #pragma region W
  88. 	{int a[5][5] = {0};
  89. 	int num = 26;
  90. 	int i = 0;
  91. 	int j = 5/2;
  92. 	int ci = 0;
  93. 	int cj = 0;
  94. 	while (1){
  95. 		a[i][j] = num++;        //将num当前数存入a[i][j];
  96. 		ci = i;					//保存i当前值;
  97. 		cj = j;					//保存j当前值;
  98. 		if (ci == 0)i = 5 - 1;	//判断上一个是否在第0行
  99. 		else i--;
  100. 		if (cj == 5 - 1){		//判断上一个是否在第N-1列
  101. 			j = 0;
  102. 			i = ci-1;
  103. 		}
  104. 		else j++;
  105. 		if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){		//判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
  106. 			i = ci+1;
  107. 			j = cj;
  108. 		}
  109. 		int flag = 0;
  110. 		for (int u = 0; u < 5; u++){				//判断矩阵是否已满
  111. 			int flag1 = 0;
  112. 			for (int v = 0; v < 5; v++){
  113. 				if (a[u][v] == 0){
  114. 					flag1 = 1;
  115. 					break;
  116. 				}
  117. 			}
  118. 			if (flag1 == 1){
  119. 				flag = 1;
  120. 				break;
  121. 			}
  122. 		}
  123. 		if (flag == 0)break;					//flag=0说明矩阵已经填满,跳出循环
  124. 	}
  125. 	for (int i=0;i<5;i++)
  126. 	{
  127. 		for(int j=0;j<5;j++)
  128. 		{
  129. 			arr10[i+5][j+5]=a[i][j];
  130. 		}
  131. 	}
  132. 	}
  133. #pragma endregion
  134. #pragma region W
  135. 	{int a[5][5] = {0};
  136. 	int num = 51;
  137. 	int i = 0;
  138. 	int j = 5/2;
  139. 	int ci = 0;
  140. 	int cj = 0;
  141. 	while (1){
  142. 		a[i][j] = num++;        //将num当前数存入a[i][j];
  143. 		ci = i;					//保存i当前值;
  144. 		cj = j;					//保存j当前值;
  145. 		if (ci == 0)i = 5 - 1;	//判断上一个是否在第0行
  146. 		else i--;
  147. 		if (cj == 5 - 1){		//判断上一个是否在第N-1列
  148. 			j = 0;
  149. 			i = ci-1;
  150. 		}
  151. 		else j++;
  152. 		if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){		//判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
  153. 			i = ci+1;
  154. 			j = cj;
  155. 		}
  156. 		int flag = 0;
  157. 		for (int u = 0; u < 5; u++){				//判断矩阵是否已满
  158. 			int flag1 = 0;
  159. 			for (int v = 0; v < 5; v++){
  160. 				if (a[u][v] == 0){
  161. 					flag1 = 1;
  162. 					break;
  163. 				}
  164. 			}
  165. 			if (flag1 == 1){
  166. 				flag = 1;
  167. 				break;
  168. 			}
  169. 		}
  170. 		if (flag == 0)break;					//flag=0说明矩阵已经填满,跳出循环
  171. 	}
  172. 	for (int i=0;i<5;i++)
  173. 	{
  174. 		for(int j=0;j<5;j++)
  175. 		{
  176. 			arr10[i][j+5]=a[i][j];
  177. 		}
  178. 	}
  179. 	}
  180. #pragma endregion
  181. #pragma region W
  182. 	{int a[5][5] = {0};
  183. 	int num = 76;
  184. 	int i = 0;
  185. 	int j = 5/2;
  186. 	int ci = 0;
  187. 	int cj = 0;
  188. 	while (1){
  189. 		a[i][j] = num++;        //将num当前数存入a[i][j];
  190. 		ci = i;					//保存i当前值;
  191. 		cj = j;					//保存j当前值;
  192. 		if (ci == 0)i = 5 - 1;	//判断上一个是否在第0行
  193. 		else i--;
  194. 		if (cj == 5 - 1){		//判断上一个是否在第N-1列
  195. 			j = 0;
  196. 			i = ci-1;
  197. 		}
  198. 		else j++;
  199. 		if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){		//判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
  200. 			i = ci+1;
  201. 			j = cj;
  202. 		}
  203. 		int flag = 0;
  204. 		for (int u = 0; u < 5; u++){				//判断矩阵是否已满
  205. 			int flag1 = 0;
  206. 			for (int v = 0; v < 5; v++){
  207. 				if (a[u][v] == 0){
  208. 					flag1 = 1;
  209. 					break;
  210. 				}
  211. 			}
  212. 			if (flag1 == 1){
  213. 				flag = 1;
  214. 				break;
  215. 			}
  216. 		}
  217. 		if (flag == 0)break;					//flag=0说明矩阵已经填满,跳出循环
  218. 	}
  219. 	for (int i=0;i<5;i++)
  220. 	{
  221. 		for(int j=0;j<5;j++)
  222. 		{
  223. 			arr10[i+5][j]=a[i][j];
  224. 		}
  225. 	}
  226. 	}
  227. #pragma endregion
  228. 	for (int i=0;i<5;i++)
  229. 	{
  230. 		for (int j=0;j<2;j++)
  231. 		{
  232. 			if (i==2)
  233. 			{
  234. 				int k=j+2;
  235. 				int temp=arr10[i][k];
  236. 				arr10[i][k]=arr10[i+5][k];
  237. 				arr10[i+5][k]=temp;
  238. 			}
  239. 			else
  240. 			{
  241. 				int temp=arr10[i][j];
  242. 				arr10[i][j]=arr10[i+5][j];
  243. 				arr10[i+5][j]=temp;
  244. 			}
  245. 		}
  246. 	}
  247. 	for (int j=0;j<5;j++)
  248. 	{
  249. 			int temp=	arr10[j][5+k];
  250. 			arr10[j][5+k]=arr10[j+5][5+k];
  251. 			arr10[j+5][5+k]=temp;
  252. 	}
  253. 	for (int i=0;i<10;i++)
  254. 	{
  255. 		for(int j=0;j<10;j++)
  256. 		{
  257. 			printf("%3d",arr10[i][j]);
  258. 		}
  259. 		printf("\n");
  260. 	}
  261. }
  262. void main()
  263. {	
  264. 	printf(" 奇数的数组23题已经打印  这里打印  n=10  n=8  两种情况\n");
  265. 		MF5();
  266. 		printf("\n\n\n");
  267. 		int arr[8][8]={0};
  268. 		MF494(arr);
  269. 	system("pause");
  270. }
  271.  

代码编译以及运行

由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:

1)新建工程

2)选择工程

3)创建完工程如下图:

4)增加文件,右键点击项目

5)在弹出菜单里做以下选择

6)添加文件

7)拷贝代码与运行

程序运行结果

代码下载

http://download.csdn.net/detail/yincheng01/6681845

解压密码:c.itcast.cn






基于visual Studio2013解决C语言竞赛题之1094纵横图的更多相关文章

  1. 基于visual Studio2013解决C语言竞赛题之0401阶乘

      题目 解决代码及点评 这个是一道经典的教科书题目,基本上每本基础的c/c++语言教科书都会有这个题目 用来演示循环语句 #include <stdio.h> #include ...

  2. 基于visual Studio2013解决C语言竞赛题之0205位数求和

     题目

  3. 基于visual Studio2013解决C语言竞赛题之0201温度转换

    题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void main() { float f; float c; float ...

  4. 基于visual Studio2013解决C语言竞赛题之0409 100以内素数

       题目 解决代码及点评 在已经知道素数是怎么判断的基础上,增加循环,可以判断出100以内的素数 /******************************************* ...

  5. 基于visual Studio2013解决C语言竞赛题之0408素数

      题目 解决代码及点评 判断一个数是不是素数的方法,一般是看n是不是能被n以内的某个整数(1除外)整除 为了提高效率,这个整数范围一般缩小到n的平方根 如果在这个范围内的整数都不能整除,那么 ...

  6. 基于visual Studio2013解决C语言竞赛题之0407最大值最小值

      题目 解决代码及点评 这道题考察循环和比较 /*********************************************************************** ...

  7. 基于visual Studio2013解决C语言竞赛题之0406数列求和

      题目 解决代码及点评 这个题目,还是考察for循环的使用 以及数列规律,该数列的特点是第n个分子 = 第n-1个分子 + 第n-2个分子,分母也是此规律 而另外一个规律是第n个分子和第n- ...

  8. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和

      题目 解决代码及点评 这道题和上一道题类似,第n个累加项 = n-1累加项的n倍 由于有这个规律,我们可以用一个for循环实现 但是例子代码并没有这么做,大家可以回去修改下代码,使得代码更 ...

  9. 基于visual Studio2013解决C语言竞赛题之0404循环求和

      题目 解决代码及点评 这道题考验for循环和一个简单的算法 因为每次累加的值有规律,后面一次累加是前面一次累加的两倍 所以可以用简单的循环,计算累加项和累加结果 /************ ...

随机推荐

  1. Chapter 7 代理模式

    代理模式:为其它对象提供一种代理以控制对这个对象的访问. 代码: package xiao; class Girl{ private String name; public void setName( ...

  2. Oracle 专用模式(DEDICATED) 和 共享模式(SHARE) (转)

    Oracle 是一门博大精深的技术.玩了2年的oracle,依旧还有很多知识点不清楚. 昨天群里的朋友提到了 DEDICATED 和 SHARE 两种模式. 不清楚,默默的做点功课了.从网上搜了点知识 ...

  3. mong 备份和恢复

    [root@hy-mrz01 bin]# ./mongofiles list -h114.55.5.57 -db pics 20160602152850deeabcb1bd2644afa0c3a9a8 ...

  4. 查看电脑已安装的Jdk的位数

    查看自己电脑已安装的Jdk的位数的方法: public class ShowJdkBit { public static void main(String[] args) { String arch ...

  5. 《编程之美》学习笔记——指挥CPU占用率

    问题: 写一个程序.让用户来决定Windows任务管理器(Task Manager)的CPU占用率(单核). 有下面几种情况: 1.CPU占用率固定在50%,为一条直线 2.CPU的占用率为一条直线, ...

  6. InstallShield安装包卸载-完美卸载

    在前面的日志里面介绍了在卸载的时候删除整个安装文件夹的方式.可是当遇到程序生成的文件不是在同一个文件夹下,有时甚至是用户自己定义的文件夹路径,这个时候我们卸载的时候是没有将用户自己定义的文件夹给删除掉 ...

  7. GlusterFS常用命令

    1.启动/关闭/查看glusterd服务 # /etc/init.d/glusterd start # /etc/init.d/glusterd stop # /etc/init.d/glusterd ...

  8. 14-UIKit(拖拽手势、布局)

    目录: 1.手势创建的拖拽方式 2.frame,bounds,transform,center区别 3.触控(touch) 4.布局 5.代码布局 回到顶部 1.手势创建的拖拽方式 创建手势对象,修改 ...

  9. Js内存泄露问题总结

    最近接受了一个Js职位的面试,问了很多Js的高级特性,才发现长时间使用已知的特性进行开发而忽略了对这门语言循序渐进的理解,包括Java我想也是一样,偶尔在Sun官方看到JDK6.0列举出来的new f ...

  10. php实现加好友功能

    思路: 1用户发送好友申请之后 把申请储存到申请数据表中,状态为 未验证 2 当用户登录时,查询申请表中是否有uid和被申请人id相同的,如果同意,更改状态,并把数据插入到对应的好友数据表否则,删除申 ...