找回密码
 点一下
查看: 1967|回复: 7

关于整数运用的一点思考

[复制链接]
发表于 2009-1-3 18:52:00 | 显示全部楼层 |阅读模式
关于整数运用的一点思考
大家可曾想过,一个十进制整数能储存多少信息?我可以告诉你,能够存放一个多项列表,信不?
我就以物品合成为例来说明一下。
传统的物品合成需要几个物品列表,而利用整数,一个就轻松搞定。
下面说一下我的思路:
一、每一个可以作为素材的物品都有一个自定义值(整数),在11~99之间(共89个物品,不够可以调整),包含两个部分,十位,我把它设定为值位,个位,设定为权位。
二、每个可以合成的物品都有一个合成码(五位整数,从00011(11)至99999共99989个,多了可以调整)。
三、每个可合成物品只有一种合成方法,如有多种,当做“不同”物品来对待。

触发(暂且60个可合成物品):
数据结构:
整数数组:In[6],IW[60];物品数组IL[60];整数W1,W2;
事件:任意单位获得一个物品
条件:无
动作:
for In[1]从0循环到1
for In[2]从0循环到1
for In[3]从0循环到1
for In[4]从0循环到1
for In[5]从0循环到1
for In[6]从0循环到1
for A 1 到 6
{动作-
    IF IN[A]=1
   -THEN SET W1 =触发单位 A 位置的物品自定义值/10的余数
SET W2 =触发单位 A 位置的物品自定义值/10取整
IF N=0 SET N=W1 SUN =W2*10的W1次幂
ELSE IF N/W1 的余数不等于0 ET N=N*W1 SUN =SUN+W2*10的W1次幂;}
for B 1 到 60
if iw[B]<SUN THEN SET B =60;
IF SUN=IW[B] THEN  动作 -FOR A 1 TO 6 DO IF IN[A]=1 THEN DELETE 触发单位 A 位置的物品;
                         give 触发单位IL[B]的物品;
                         set b=60;
这样,实际只需一个物品列表即可完成叠加,数据量也很小,是不是很简单?
其实如果好好学习数论与数据结构,对编程还是有很大帮助的,我其实是一个noip选手,改行来玩WE的。
新手的第一份像样的东西,欢迎批评与表扬。

评分

参与人数 2威望 +36 收起 理由
白银の游戏王 + 1 表扬。
kook + 35 奖励.

查看全部评分

kw 该用户已被删除
发表于 2009-1-3 19:08:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2009-1-3 20:02:37 | 显示全部楼层
表扬:这篇文章
批评:既然楼主都想到这了,为什么没想到用2进制位呢,每个整数实际上就素32bit的信息而已,看如何充分应用了
回复

使用道具 举报

发表于 2009-1-4 08:51:12 | 显示全部楼层
只不过是时间换空间的做法,对Jass而言,时间比空间重要多了吧....
回复

使用道具 举报

发表于 2009-1-4 09:56:16 | 显示全部楼层
这个应该是T吧
貌似有人写过类似的
还有1楼,有表扬应该也有奖励吧
回复

使用道具 举报

kw 该用户已被删除
发表于 2009-1-4 12:41:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-1-4 15:27:10 | 显示全部楼层
回2楼,这样处理太麻烦,划不来
回复

使用道具 举报

发表于 2009-1-4 15:27:42 | 显示全部楼层
相对于10进制,2进制更好一些吧。
boolean判断比integer快,而且integer算数位还要求mod。

嗯…………………………
2进制是比较好的,想的时候也好弄,不必在判断这上面花太大的功夫。

说完了…………
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 15:32 , Processed in 0.056394 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表