趣味数组(一)

首先,我们来聊一聊魔方数组。

1.魔方数组

首先,啥事魔方数组呢?例如:

6  1  8

7  5  3

2  9  4

他的每一行,每一列以及对角线的和都等于一个常数,这个常数为n*(n*n+1)/2。其中,n为阶数。

那么,我们应该怎么实现魔方数组呢?

1.我们将1安置在第一行的中间位置,及(i,j)=(1,(n+1)/2)

2.下一个数我们写到上一个数主对角线的上方,即(i1,j1)=(i-1,j-1)

3.如果在上一步中,i和j出界,则令i=n或者j=n。

4.如果,应写的位置没有出界,但是已经有数字,则将他移到下一行,但是列数不变。

代码如下:环境VS2010

<span style="font-size:24px;">	int a[100][100];
	int n;//
	scanf("%d",&n);

	int i=1;
	int j=int((n+1)/2);
	int i1,j1;
	int x=1;
	memset(a,0,sizeof(a));

	while(x<=n*n)
	{
		a[i][j]=x;
		x++;
		i1=i;
		j1=j;
		i--;
		j--;
		if (i==0)
		{
			i=n;
		}
		if (j==0)
		{
			j=n;
		}
		if (a[i][j]!=0)
		{
			i=i1+1;
			j=j1;
		}
	}
	for(i=1;i<=n;i++)
	{
			printf("\n");
		for (j=1;j<=n;j++)
		{
			printf("%4d",a[i][j]);
		}
	}
</span>

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

时间: 2024-11-03 21:44:44

趣味数组(一)的相关文章

趣味数组(二)

今天,继续讲趣味数组. 1.编程然后请输出这样的一个数组: 这和我们线代中学的上三角矩阵有点类似.我们在处理这个问题时,我们按照层来处理,不是一般的行列. 那么啥是层呢?例如:1就是第一层,2,3 就是第二层,456就是第三层,以此类推.在这里我们可以发现,层号和这个层里面所包含的元素个数是相同的. 设层号是 i,每一层所包含的元素个数为 j.那么,i 的范围是 i∈[1,n], j∈[1,i]. 这样我们就能很快的找出每一个元素位置的坐标关系:a[i-j+1][j] 代码如下: int a[1

得到数组的最后一个数的趣味实现

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 利用了指向数组的指针来完成,直接上代码了. // 得到数组的最后一个数 - 使用指向数组的指针来完成 #include <stdio.h> int main() { printf(" 得到数组的最后一个数的趣味实现 \n"); printf(" - http://blog.csdn.net/morew

【趣味算法题】在数组中,对于所有元素,找出比当前元素大的下一个元素

在数组中,对于所有元素,找出比当前元素大的下一个元素 意思就是,eg.  数组为 3 1 2 5 4 6 7 那么我们需要得到的结果应该是  5 2 5 6 6 7 -1 解决方法如下: 暴力匹配: O (n ^ 2 ) 的效率对所有元素匹配过去,效率非常的低 经过提示, 我想到的一种 O ( nlg n ) 效率的算法 只需要对数组扫描一次,我们用一个 Priority_queue 来得到当前最小的元素 Prority_queue 存放的数据结构为: struct sc { int key,

数组中的趣味题一

无论是参加面试还是笔试,数组都是常考的内容,并且考察数组的知识往往结合着比较有意思的算法.在这里参照网上的资料和平时看过的相关书籍总结一下,作为自己的面试复习材料吧.我知道这个总结肯定有遗漏或者是不对的地方,希望大家看到可以优化和改正的的地方,帮帮忙给点新思路吧.谢谢大家~~ 1.求数组中的最大值(最小值) 问题描述:给定一个整数数组arr,找出其中的最大值(最小值). 解决思路:传统的方法就是遍历一次数组即可得到最大值(最小值),时间复杂度是O(N):现在说另外一个思路利用二分,即将数组分成元

趣味小游戏,测试你们做过的傻事

我们可以用集合来做一个这种趣味的测试,输入一个或者两个人的名字,系统自动生成一句话,这句话中的一些词语都是随机组合,这样随机拼出来的句子就显得比较有趣. 首先是控制游戏开始: 下面开始定义几个集合,分别存放我们编好的用来组成一句话的语句: 开始输入两个人的名字,分别存储在name1和name2里: 之后利用随机数生成器,句子每个部分有8个元素所以生成0-7之间的随机数:这里我们定义了5个集合,每次生成5个随机数,放入n[]这个数组中,然后利用数组n[]进行显示操作: 到这里游戏制作完成. 游戏效

Swift趣味案例之约瑟夫环

[问题描述] 约瑟夫环问题是约瑟夫提出的这样一个问题: 编号分别为1, 2, ......, n的n个人围成环状,从编号为k的人开始报数,报到数m时对应的人退出环,下一个人重新报数,一直循环直到所有人都退出环. 求最后一个退出环者和第p个退出环者的编号. [设计思路]  第一种思路: 创建一个包含n + 1个元素且元素值都为1的数组,数组中后n个元素的索引分别代表报数者的编号.通过循环重复报数,每次出圈者将数组中对应的元素值置为0,直到出圈人数为n - 1.在循环的过程中,判断是否为第p个出圈者

趣味算法总目录

趣味算法总目录: 排序部分: 归并排序(Merge sort) 堆排序 快速排序 && 希尔排序 && 插入排序 基数排序 排列与组合: 排列 && 组合 网络流问题: 最大流问题 数学问题: 奇妙的数学 1. 约瑟夫(环)问题. 2. 不用任何中间变量交换两个变量 a 和 b 的值. 3. 不用加减乘除求两个整数的和. 4. 不用乘.除.取余运算实现两个 int 值相除. 5. 找数组中单数问题 6. ACM: 今天是星期一,再过 1^1+2^2+3^3+

Python 趣味百题

趣味整数 1 不重复的3位数 -易 2 水仙花数 -易 3 完全数 -中 4 相亲数 -中 5 黑洞数 -中 6 勾股数 -易 7 自守数 -易 8 3位反序数 -中 趣味素数 1 素数 -中 2 孪生素数 -中 3 金蝉素数 -中 4 可逆素数 -中 5 回文素数 -中 6 平方回文素数 -中 7 梅森尼数 -中 8 哥德巴赫猜想 -中 9 等差素数数列 -中 趣味图形 1 回型矩阵 -中 2 九九乘法表 -易 3 杨辉三角 -易 数学问题 1 天平秤物 -难 2 黑色星期五 -易 3 存钱问

学以致用一:得到数组的最后一个元素。

如题上,通常的思想是遍历一遍啦,这里有个比較有意思的方法(程序猿面试宝典上有对应的题  四版,p78) 利用了指向数组的指针来完毕: [cpp] view plaincopy // 得到数组的最后一个数 - 使用指向数组的指针来完毕 #include <stdio.h> int main() { printf("    得到数组的最后一个数的趣味实现 \n"); const int MAXN = 8; int a[MAXN] = {1, 2, 4, 8, 16, 32, 6