导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

求一个算法,应该是比较简单的,跪请高手指点,100分,在线等~~~~~~~~~

caire1983 2004-04-02 09:11:18
需求:
有不固定的许多条语句(有时增加有时减少),每次访问这段程序需要执行其中的五条

下面是我写的,希望大家给出一个更高效的算法

int j;
j=XXXXXX;//每次访问在这里设置j的值,以执行不同的5条语句
for (int i=0;i<5;i++)
{
switch j
{
case 1:
XXXXXX....;
case 2:
XXXXXX....;
case 3:
XXXXXX....;

.................

case 100:
XXXXXX....;

}

j=XXXX;///对j进行运算,下次循环好在SWITCH CASE中选择其它语句
}
我是在ASP中这段程序,为了方便用C++的行式写出来,希望大家给出的算法中不要用一些ASP中没有的功能
...全文
18 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wushigang 2004-04-05
我说了吧,你要把你的整个思路要做的事情写清楚,光给XXXX谁都不知道。。。
你是不是就是有一些链接,每五个一页显示吗?看起来很容易哟,为什么会出你上面那种代码来呢,真是想不通。。。郁闷!!
先建个数组,把你的链接都记下来,用下面的方法,可以让你能在中间方便地增加/减少:
dim mylinks(100)
dim linkcount
linkcount=0
mylinks(linkcount)="http://xxx/x0.htm"
linkcount=linkcount+1
mylinks(linkcount)="http://xxx/x1.htm"
linkcount=linkcount+1
....

然后写个函数
sub ShowLinks(page)
dim i
for i=page*5 to page*5+4
response.write mylinks(i)
next
end sub

按照你的说法,我就是这么理解的,应该很简单,你为什么搞那么繁杂。 如果不对,说明你仍然没有讲明白你到底要干什么。
回复
Hawk_lp 2004-04-04
up
回复
evice 2004-04-03
要把这些链接每页打印出五个来
五个一组五个一组的分开

不太明白。
回复
icenl 2004-04-02
4.1已过了, 还在玩
回复
caire1983 2004-04-02
情况是这样的:
在ASP程序中有好多个链接要打印出来,这些链接随时要变化,有时加,有时减,加的时候多.
要把这些链接每页打印出五个来,就是这样的.
如果用SWITCH把这些链接五个一组五个一组的分开,那第一组增加一个就要把所有的组做相应的调整,我现在是手动分组,太累了,天天都要改一次,我们头要求算法效率很高,所以我想求一个高点效率的算法,

跪请高手出手吧~~~~~~~~~~~
回复
evice 2004-04-02
既然第一个K确定,后面的也确定,要是可能的话,干脆SWITCH(K)算啦,每个CASE里包含该情况要执行的所有语句。如果代码不是超级的长的话,应该行得通。
回复
caire1983 2004-04-02
我写XXXXXX就说明这一句你完全可以不管
--------------------------
非常感谢smallbugworm(虫虫)
但还是有问题:因为我说语句是不固定的,会随时添加或减少,如果这样分成段,当要在第一段中加几条语名,那后面的所有段又都要重新排一次
回复
酒红绿叶 2004-04-02
switch case的效率还行,如果你都知道了条目,就不用分割区域了吧,
与其研究算法,不如买台好电脑吧!
不过,研究效率才是C程序员的本色!

不过,效率上实在看不出来什么区别!
回复
wushigang 2004-04-02
按照你原来的题目,你的算法够有效率的了,不就是循环五次吗!改什么改呀
如果在实际中不行,一定要改,你就得把全部前前后后写清楚,光XXXXXX谁知道是什么玩意,看了你的整个思路,自然就有优化办法了,说不定你上面的那一段语句完全都用不着。。。
回复
名牌大灰狼 2004-04-02
我同意虫虫的 :> 这样在比较多的比较有就可以快一些.其实现存电脑这么快.无所谓.处理百于条小菜.
回复
smallbugworm 2004-04-02
int j;
j=XXXXXX;//每次访问在这里设置j的值,以执行不同的5条语句
for (int i=0;i<5;i++)
{
if(j<=30)
{
switch j
{
case 1:
XXXXXX....;
case 2:
XXXXXX....;
case 3:
XXXXXX....;

.................

case 30:
XXXXXX....;
}
}
else if(j<=60)
{
switch j
{
case 31:
XXXXXX....;
case 32:
XXXXXX....;
case 33:
XXXXXX....;

.................

case 60:
XXXXXX....;
}
}
else if(j<=100)
{
switch j
{
case 61:
XXXXXX....;
case 62:
XXXXXX....;
case 63:
XXXXXX....;

.................

case 100:
XXXXXX....;
}
}
j=XXXX;///对j进行运算,下次循环好在SWITCH CASE中选择其它语句
}
需要对 j 进行锁定范围,减少判别次数
你也可以依同样方法改正
回复
caire1983 2004-04-02
J的第一次值确定,其它的4次也就确定下来了
回复
caire1983 2004-04-02
J的第一次值确定,用4次也就确定下来了,
现在我的算法每次访问要进行5次循环,5次判断,我想要一个更高效的,因为我们公司的服务器太烂了,人又很多
回复
GodInNight 2004-04-02
第一,不知道你的J值的依赖性,如果第一次确定,后4次也跟着确定,也就是第一个J给出,5个指令已经确定,J值和5个指令是一一对应的,那么你建一个J到指令的映射,利用goto语句是最复杂的,也是最高效的。

如果J值运算还依赖其他关系,依赖单条指令,那也就你那样了。呵呵
回复
skyxie 2004-04-02
你的意思是不想要那个for在switch外面吗?
回复
酒红绿叶 2004-04-02
主要使用了随机函数,
如果你不想重复执行,可以用一个变量纪录执行的指令,如果重复则再选一条指令!


如果,不知道指令的数目,
可以判断所选指令是否存在,不在,重新选择,或者,在选择之前得到指令的数目!
回复
快乐鹦鹉 2004-04-02
我觉得这个方法不差啊。虽然好像程序比较复杂,但是执行起来效率并不低啊。有些程序是写得简单但运行耗时;有些程序是写的复杂但运行快。你的就是后者。没必要改。
回复
酒红绿叶 2004-04-02
int j;
//假设你其中有n条命令
int num;
spand(time(NULL));
num = rand()%num;//得到n条指令中随机的一个数字

for (int i=0;i<5;i++)
{
switch j
{
case 1:
XXXXXX....;
case 2:
XXXXXX....;
case 3:
XXXXXX....;

.................

case 100:
XXXXXX....;

}

j=num = rand()%num;//得到n条指令中随机的一个数字}
回复
caire1983 2004-04-02
这个算法真的就优化不了了吗?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……