不拘一格编程序之一
循环打印算法
作者:朱云翔
小说中经常有人说某某将领打仗天马行空,不拘一格,让敌人防不胜防,比如《×××》中的李牧;比如《大唐双龙传》中的寇少。
编程序时也要有怎样的思想,不能被条条框框所束缚,比如这个例子:
【例1】编写一个函数void fun(int t),要求在屏幕上打印t个“*”号,其中t的长度不会大于50。 【设计1】:
void fun(int t) { if (t<0 || t>50) return; switch(t) { case 1: printf("*");break; case 2: printf("**");break; 此处删除500字 case n: printf("*****......**");break; } } 以上方法虽然笨拙,但是时间复杂度为O(1),快!这是牺牲空间换取时间。
当然,编写设计一的人员一般不多,绝大多数人使用设计2。
【设计2】:
void fun(int t) { int i; if (t<0 || t>50) return; for(i=0;i<t;i++) printf("*"); } 以上算法是最正宗的算法!优点是:程序相当简单,思路相当清晰。缺点是时间复杂度为O(t)。
【设计3】:
void fun(int t) { char *p="****************************************************************************************"; char buf[51]; if (t<0 || t>50) return; memcpy(buf, p, t); buf[t]=0; printf(buf); } 乍一看,真麻烦,但是时间复杂度O(1)。有人说,那前面的memcpy等代码就不耗费时间了吗?答曰:1、memecpy的时间花费远远printf等屏幕显示类函数底。2、就算是空循环体的for循环再编译后也会产生若干行代表,比memcpy要慢。
但是这里增加了p和buf的存储空间。
【设计4】:
void fun(int t) { char *p; if (t<0 || t>50) return; if (!(p = (char *)malloc(t+1))) return; memset(p, '*', t); p[t]=0; printf(p); free(p); return; } 与设计3类似,但与其相比,减少了多余的空间浪费,但是去增加了malloc内存分配操作和memset内存设置操作,相对增加了时间耗费。时间复杂度O(1)。
编写软件不拘一格,并不是要你编什么程序都剑走偏锋,而是说当走普通的路不通的时候,或者非常难走时,别完了试试其它的路。就像以上算法,各自有其优缺点,都有其自己的适用范围,切勿只用一种包打天下,也切勿为了眩耀而使用不适用的算法。
|
循环打印算法:不拘一格编程序之一
推荐 原创
©著作权归作者所有:来自51CTO博客作者zhuyunxiang的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:关于博客网站管理的若干建议

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
循环的各种形式(不拘一格编程序之四)
求S=1+2+3+...+100的值。
职场 休闲 C 循环 不拘一格编程序 -
变量取值交换的方法:不拘一格编程序之三
【题目】已知两变量a和b,设计一个算法,交换a与b的值
职场 编程 休闲 不拘一格编程序 取值交换 -
全局统一格式返回
全局统一格式返回
数据 状态码 初始化 -
“别具一格”的vue双向数据绑定原理
背景和一点点看法见网上许多文章讲vue双向数据绑定一开口就大谈 Object.defineProperty 和 proxy。其实不然。向绑定。v-model和双向绑定
vue v-model 双向数据绑定 lazy修饰符 数据 -
Python 算法之一
Python 算法之一
python 公众号 时间复杂度 执行时间 空间复杂度