BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #83861同步于 2014/11/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

看到别人家孩子写的C程序,感觉自己不会C语言了

ahfytao
2014/11/3镜像同步3 回复
在九度oj上刷了一道面试题(旋转数组的最小数字,题目连接如下http://ac.jobdu.com/problem.php?pid=1386),我是用二分查找做的,最后也AC了,但觉得耗时有点长(680ms),所以就看了下用C语言写的耗时最短的C代码(280ms),结果看了半天硬是没看明白280ms代码的解题思路是啥,求各路大神指点指点。 题目描述如下: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 耗时280ms的C代码如下: #include<stdio.h> #include<ctype.h> unsigned int s[8]; int main() { register int a,b,n; int m; register char c; char s[500000]; while(scanf("%d",&m)!=EOF) { n=m; while(!isdigit(c=getchar())); for(a=c-'0'; isdigit(c=getchar());) { a=(a<<4)+(c-'0'); } while(--n){ while(!isdigit(c=getchar())); for(b=c-'0'; isdigit(c=getchar());) { b=(b<<4)+(c-'0'); } if(a>b) { a=b; gets(s); break; } } for(n=0;n<8;n++) { s[n] = a&0xf; a=a>>4; } n=8; while(n&&(s[--n]<1)); printf("%d",s[n]); while(n) { printf("%d",s[--n]); } printf("\n",a); } return 0; } 看明白的大神们说说代码的解题思路是啥啊。。。。
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
glazard机器人#1 · 2014/11/3
这个就没查找,直接在读取输入的时候判断的… 通过『我邮2.0』发布
ahfytao机器人#2 · 2014/11/4
貌似他判断的方法也挺特别的。。。 【 在 glazard (笔之海) 的大作中提到: 】 : 这个就没查找,直接在读取输入的时候判断的… : 通过『我邮2.0』发布 通过『我邮2.0』发布
glazard机器人#3 · 2014/11/4
就相当于用BCD数比较的大小 【 在 ahfytao (嘚瑟的我) 的大作中提到: 】 : 貌似他判断的方法也挺特别的。。。 : 通过『我邮2.0』发布 通过『我邮2.0』发布