基于visual Studio2013解决C语言竞赛题之0523魔方阵

原创 2013年12月04日 23:46:15



题目


解决代码及点评

/*
功能:打印魔方阵。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如:三阶魔方阵为
                        8  1  6	
                        3  5  7
                        4  9  2 
    要求打印由 1到 的自然数构成的魔方阵。
    提示:魔方阵中各数的排列规律如下:
      ⑴  将“1”放在第一行中间一列;
      ⑵  从“2”开始直到n×n为止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1;
      ⑶  如果上一个数的行数为1,则下一个数的行数为 n(指最下一行);
      ⑷  当一个数的列数为 n,下一个数的列数应为1,行数减1;
      ⑸  如果按上面规则确定的位置已有数,或上一个数是第 1行第 n列时, 则把下一个数放在上一个数的下面。

 
*/

#include<stdio.h>
#include<stdlib.h>

#define N 5				//N可以为任何奇数,因为偶数矩阵没有对角线,故不符合题意

void main(){
	int a[N][N] = {0};
	int num = 1;

	int i = 0;
	int j = N/2;

	int ci = 0;
	int cj = 0;


	while (1){
		a[i][j] = num++;        //将num当前数存入a[i][j];
		ci = i;					//保存i当前值;
		cj = j;					//保存j当前值;
		
		if (ci == 0)i = N - 1;	//判断上一个是否在第0行
		else i--;
		if (cj == N - 1){		//判断上一个是否在第N-1列
			j = 0;
			i = ci-1;
		}
		else j++;
		if (a[i][j] != 0 || (ci == 0 && cj == N - 1)){		//判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
			i = ci+1;
			j = cj;
		}

		int flag = 0;
		for (int u = 0; u < N; u++){				//判断矩阵是否已满
			int flag1 = 0;
			for (int v = 0; v < N; v++){
				if (a[u][v] == 0){
					flag1 = 1;
					break;
				}
			}
			if (flag1 == 1){						
				flag = 1;
				break;
			}
		}
		if (flag == 0)break;					//flag=0说明矩阵已经填满,跳出循环
	}
	
	for (int u = 0; u < N; u++){				//打印矩阵
		for (int v = 0; v < N; v++){
			printf("%3d",a[u][v]);
		}
		printf("\n");
	}
	system("pause");
}


代码编译以及运行

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

1)新建工程

2)选择工程

3)创建完工程如下图:

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

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

6)添加文件

7)拷贝代码与运行


程序运行结果





版权声明:本文为博主原创文章,未经博主允许不得转载。

魔方阵程序编写

魔方阵程序编写魔方阵程序编写 何为魔方阵 魔方阵的规律 代码 使用二维数组的方法 何为魔方阵  魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,...
  • yanenwei
  • yanenwei
  • 2016年05月17日 13:55
  • 922

奇数阶魔方阵!

import java.util.Scanner; public class Test5 { /* * 打印“魔方阵”。所谓的魔方阵是指这样的方阵, * 它的行、列、对角线元素之和均...
  • aaygj
  • aaygj
  • 2013年04月30日 16:47
  • 2236

魔方阵原理及十种解法(C语言)

魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。 如3×3的魔方阵:      8 ...
  • MacanS
  • MacanS
  • 2016年04月21日 15:35
  • 7750

基于visual Studio2013解决C语言竞赛题之0525拉丁方阵

题目解决代码及点评/************************************************************************/ /* 25. n×n的拉丁方阵的...
  • yincheng01
  • yincheng01
  • 2013年12月04日 23:52
  • 1856

任意阶魔方阵算法的实现

老师布置了一道c语言的题目:生成任意阶的魔方阵,通过阅读现有算法,作了自我实现,具体算法介绍可以参照:     http://www.cnblogs.com/codingmylife/archive...
  • u010009169
  • u010009169
  • 2014年03月30日 12:45
  • 695

奇数阶魔方阵算法分析

奇数阶魔方阵就是指行列数都是吧n(n>=3 且 n%2 == 1)的魔方阵奇数阶魔方阵的数字规律 通过对奇数阶魔方阵的分析,其中的数字排列有如下的规律: (1)自然数1出现在第一行的正中间; ...
  • yy763496668
  • yy763496668
  • 2016年06月27日 10:40
  • 1686

c语言:实现奇数阶魔方阵

奇数阶魔方阵算法:   1.将第一行中间一列赋值为数值1;   2.以此进行行数减1,列数加1;   3.如果行数的下一行小于0,则将行数设置为n-1;   4.如果列数的下一列大于阶数n,则将列数设...
  • qq_28598203
  • qq_28598203
  • 2016年04月13日 21:37
  • 1319

acm奇数魔方阵

奇数魔方阵 (输入文件:input.txt 输出文件:output.txt) 魔方矩阵是一个n*n奇数矩阵,其中n^2个元素分别是1,2,3,4,5…,n^2。魔方矩阵的特点是:任意一行、任意一列以...
  • lanmushan
  • lanmushan
  • 2015年11月12日 20:54
  • 740

基于visual Studio2013解决C语言竞赛题之0605strcat

题目解决代码及点评/* 5. 写一函数,将两个字符串连接,即编写一strcat函数。 */ #include #include void stract(char *p1,char *p2...
  • yincheng01
  • yincheng01
  • 2013年12月05日 14:49
  • 1719

基于visual Studio2013解决C语言竞赛题之0607strcpy

题目解决代码及点评#include #include /* 写一函数将字符数组s1中的全部字符复制到字符数组s2中,不用strcpy函数。 */ void f67(char s1[27], cha...
  • yincheng01
  • yincheng01
  • 2013年12月05日 15:19
  • 1652
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于visual Studio2013解决C语言竞赛题之0523魔方阵
举报原因:
原因补充:

(最多只允许输入30个字)