再问个算法,多谢!一个实际问题。

[复制链接]
2402|15
 楼主| xlsbz 发表于 2012-4-6 15:16 | 显示全部楼层 |阅读模式
N个unsigned char变量,N范围是0<=N<=8
定义个数组 INT8U    tmp[8] = {0};
定义个变量 INT8U x = 0;
定义个变量 INT8U t = 0;

假设N个数的前x个变量的值相同,则 变量t = 0;
若不同,则变量t = 1。
 楼主| xlsbz 发表于 2012-4-6 15:23 | 显示全部楼层
想出来了  前x个数的和   除以 x 是否等于 首个数
lxyppc 发表于 2012-4-6 15:26 | 显示全部楼层
想出来了  前x个数的和   除以 x 是否等于 首个数
xlsbz 发表于 2012-4-6 15:23


(2+1+3)/3 = 2
joyme 发表于 2012-4-6 15:42 | 显示全部楼层
没有什么技巧的,
t = 0;
for(i=0;i<x-1;i++)
{
     if(tmp[i+1] != tmp[i])
     {
             t = 1;
             break;
     }           
}
 楼主| xlsbz 发表于 2012-4-6 16:38 | 显示全部楼层
本帖最后由 xlsbz 于 2012-4-6 16:39 编辑

3# lxyppc OOOOO
 楼主| xlsbz 发表于 2012-4-6 16:43 | 显示全部楼层
用switch case得了!!!晕!!代码长点  不出错
lxyppc 发表于 2012-4-6 17:01 | 显示全部楼层
while(x && !t)  t = tmp[--x] != tmp[0];
icecut 发表于 2012-4-6 18:17 | 显示全部楼层
按照楼主的想法,应该求方差....方差为0则相等
liang7143 发表于 2012-4-6 18:37 | 显示全部楼层
求 方差
还不如4L 来得直接
西门看雪 发表于 2012-4-6 21:16 | 显示全部楼层
没有什么技巧的,
t = 0;
for(i=0;i
joyme 发表于 2012-4-6 15:42


还有一种方法:将前N个字节 循环左移 或者 循环右移一个字节;然后比较移动前后的数据是否一致
sljzyjj 发表于 2012-4-7 09:01 | 显示全部楼层
还是四楼的直观,不知汇编后的代码效率高不高。
joyme 发表于 2012-4-7 09:45 | 显示全部楼层
效率不是最高的,for循环可以用do...while会更好点,代码的可读性也是很重要的,具体要权衡应用环境,个人不喜欢在一些对效率要求不高的程序去绞尽脑汁省几个指令周期,或用如7楼那种形式写的程序(貌似考试呀、面试什么的比较喜欢用这种出题),纯属个人意见,呵呵
Cortex-M0 发表于 2012-4-7 15:09 | 显示全部楼层
这样效率是否更高点?

t = 0;
for(i=0;i<x-1;)
{
     if(tmp[0] ^ tmp[++i])
     {
             t = 1;
             break;
     }           
}
Cortex-M0 发表于 2012-4-7 15:12 | 显示全部楼层
改用 do...while 循环

t = 0;
i = 0;
do{
     if (tmp[0] ^ tmp[++i])
     {
             t = 1;
             break;
     }           
}while(i<x-1);
chenbb8 发表于 2012-4-7 17:41 | 显示全部楼层
tmp[0] ^ tmp[++i]这样的写法貌似是比较好点,只需要从flash中读取一次 tmp[0]的值就OK了
使用^还是用== LZ测试下看下那个好
 楼主| xlsbz 发表于 2012-4-7 20:40 | 显示全部楼层
多谢楼上各位。

我觉得如何C学得灵活  学得精 脑子灵活 ,那就用^。

而我个人写程序一般用比较简单的语句, 所以我用4楼的做法。
if 0 == x {
}
else if 1 == x {
}
else if (2 《= x ) &&(x《= ) {
t = 0;
for(i=0;i<x-1;i++)
{
     if(tmp[i+1] != tmp[i])
     {
             t = 1;
             break;
     }           
}

}


多谢楼上各位大拿。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部