有趣的数字环的算法实现
2013-08-11 09:25
211 查看
看到这么个数字环,感觉很有趣,于是就想着用算法实现此数字环。
首先附图看效果,看是什么样的数字环
其实这个东西的算法实现是很简单的,写下它,是因为它代表了一种在算法中常用的一种思想,把一些看似很复杂很杂乱的想办法归一成一两种方式。计算机程序是很傻的,只会做你让它做的事。当你把问题分析清楚后,把杂乱的规律统一成类似的步骤即可!
下面看源码和注释:
首先附图看效果,看是什么样的数字环
其实这个东西的算法实现是很简单的,写下它,是因为它代表了一种在算法中常用的一种思想,把一些看似很复杂很杂乱的想办法归一成一两种方式。计算机程序是很傻的,只会做你让它做的事。当你把问题分析清楚后,把杂乱的规律统一成类似的步骤即可!
下面看源码和注释:
/** **算法思想: **观察数字的排布规律,树妖观察完全平方数的分布特点 **观察到奇数的完全平方数在右上角,偶数的完全平方数在左下角 **对于某一个奇数来说,它是在该奇数的前一个偶数的数字圈的基础上依次添加了左、上两个半圈,从左下角走到了右上角 **对于某一个偶数来说,它是在该偶数的前一个奇数的数字圈的基础上依次添加了右、下两个半圈,从右上角走到了左下角 **如此拆分后,无论多大的数字圈,都可以这么归一了(当然,1是例外,它的前面没有数字) **使用二维数组来表示比较简单,首要的是找到起始位置的坐标,然后依次如上的规律变化即可 **举例: **当输入数字7时,显然是49个数字,但是我们只考虑index为1~7时七个步骤。首先分析数字1的坐标为(3,3)【注,以左上角为原点的“坐标”】 **那么定下1的位置后,第二步:index为2,此时是从上一个奇数1的位置依次通过右边、下边两个位置走到了左下角的数字4 **第三步:index为3,此时是从上一个偶数2的位置依次通过左边、上边两个位置来到了右上角的数字9 **接下来的4步都是这么一圈圈的走下来 **可以发现,无论多大的数字圈,我们都可以把它看成是在最小的数字圈上依次的叠加起来的 **/ #include <stdio.h> #include <stdlib.h> int main() { printf("请输入一个大于0的数字:"); int length=0; scanf("%d",&length); if(length<1) { printf("输入的数字有误\n"); return; } printf("\n\n"); int num[length][length]; int x=(length+1)/2-1;//获取数字1的x坐标 int y=(length+1)/2-1;//获取数字1的y坐标 num[x][y]=1;//初始化1 int index=1;//指示循环次数 int value=1;//指定二位数组的各个点的值 while(index<length) { index++; if(index%2)//此时是奇数项 { --x; int i; for(i=0; i<index; i++) num[x][y--]=++value; ++y; for(i=0; i<index-1; i++) num[++x][y]=++value; } else { ++x; int i; for(i=0; i<index; i++) num[x][y++]=++value; y--; for(i=0; i<index-1; i++) num[--x][y]=++value; } } for(y=0; y<length; y++) { for(x=0;x<length;x++) printf("%d\t",num[x][y]); printf("\n"); } printf("\n\n"); return 0; }
相关文章推荐
- 数字图像去噪典型算法及matlab实现
- Python实现KNN算法手写识别数字
- 【LeetCode-面试算法经典-Java实现】【153-Find Minimum in Rotated Sorted Array(找旋转数组中的最小数字)】
- 数字图像去噪典型算法及matlab实现
- 尾单词长度、1 3 9 27 81 实现1-121任意算法、去除重复字符并排序、拼音转数字、按要求分解字符串
- thnk in java上有趣的算法题1 吸血鬼数字
- 【算法题】有趣的数字
- 数字图像去噪典型算法及matlab实现
- c语言实现长数字相加算法
- 【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】
- 基于qt和opencv3实现机器学习之:利用最近邻算法(knn)实现手写数字分类
- 一个简单的实现找出数组中一个数字出现次数最多的数字的算法
- 一道有趣的数字算法题
- 学习笔记——《机器学习实战》KNN算法实现 约会网站测试,手写数字识别,代码,注释,错误修改
- 算法编程题积累(4)——腾讯笔试"有趣的数字“问题
- 数字图像处理领域的二十四个典型算法及vc实现、第一章
- JAVA实现的吸血鬼数字算法,高效率版本(已有网友给出算法说明)
- 【LeetCode-面试算法经典-Java实现】【012-Integer to Roman(数字转罗马字符)】
- 数字图像处理算法实现------------编程心得(1)
- 机器学习01-KNN算法的python实现及手写体数字的识别