算法奥秘之数组实现开灯问题、蛇形填数
来源:互联网 发布:安装的软件 编辑:程序博客网 时间:2024/04/29 13:04
哈哈哈,时隔n个月,今天看了刘汝佳老师的《算法入门经典》,感觉厉害了,忍不住想要分享给大家,于是再次打开寄几小小的博客
学c语言也有一段时间了,逐渐发现,算法才是语言的精髓!于是拿起小本本,开始探索,今天是第一篇,以后或许还有下集哈哈哈
question1:开灯问题
有n盏灯,编号为1~n。第一人把所有灯打开,第二个人按下所有编号为2倍数开关的灯(这些灯将被关掉),第三个人按下所有编号为3倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推,一共有K个人,问最后有哪些灯开着?
#include<stdio.h>#include<string.h>#define maxn 1010int a[maxn];int main(){int n,k,first=1;memset(a,0,sizeof(a)); //作用把数组清零scanf("%d%d",&n,&k);for(int i=1;i<=k;i++) for(int j=1;j<=n;j++) if(j%i==0)a[j]=!a[j]; //这是点睛之处,为作者疯狂打call,取反for(int i=1;i<=n;i++) if(a[i]){if(first)first=0;else printf("");printf("%d",i);}printf("\n");return 0;}get到那个超炫酷的点没,震撼第二幕!
question2:蛇形填数
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
#include<stdio.h>#include<string.h>#define maxn 20int a[maxn][maxn];int main(){int n,x,y,tot=0;scanf("%d",&n);memset(a,0,sizeof(a));tot=a[x=0][y=n-1]=1;while(tot<n*n){while(x+1<n && !a[x+1][y]) a[++x][y]=++tot;while(y-1>=0 && !a[x][y-1]) a[x][--y]=++tot;while(x-1>=0 && !a[x-1][y]) a[--x][y]=++tot;while(y+1<n && !a[x][y+1]) a[x][++y]=++tot;} //神奇!二维矩阵移动轨迹:下下下左左左上上上右右下下左上···for(x=0;x<n;x++){ for(y=0;y<n;y++)printf("%3d",a[x][y]);printf("\n");}return 0;}
好啦~有没有和我一样觉得非常厉害,哈哈哈,是的!神逻辑一般存在的算法值得更多的探索,有趣有趣,下期见
阅读全文
0 0
- 算法奥秘之数组实现开灯问题、蛇形填数
- 算法竞赛一些基础问题的复习(java) 2(开灯问题、蛇形填数、TEX、wertyu)
- 二维数组之蛇形填数
- 算法:蛇形填数
- 【算法】蛇形填数
- 蛇形填数问题
- 蛇形填数问题
- 蛇形填数问题
- 开灯问题和蛇形填数(可类比迷宫问题)
- 算法题-蛇形填数
- 【经典算法】:蛇形填数
- 蛇形填数之倒填
- nyoj 33 蛇形填数【循环+数组】
- NYOJ 33 蛇形填数 数组练习
- 【C语言数组】蛇形填数
- 算法竞赛入门经典 蛇形填数
- 算法竞赛_蛇形填数_C++
- 蛇形填数问题(ACM入门)
- 310. Minimum Height Trees
- 350_LeetCode_350 Intersection of Two Arrays II 题解
- maven异常001---报错The folder is already a source folder.的解决办法
- Netty学习之旅(一)
- JavaScript基础
- 算法奥秘之数组实现开灯问题、蛇形填数
- ARM指令CMP详解
- STM32-寻址最大为4G
- 数据结构20171007
- 10月7日 c语言 用递归方法求n!
- BootStrap常用CSS样式的代码示例
- Ubuntu系统下gedit中文乱码
- 清华北大教授联袂推荐的好书:《区块链:金融应用实践》
- Linux入门命令(1)