|
关于整数运用的一点思考
大家可曾想过,一个十进制整数能储存多少信息?我可以告诉你,能够存放一个多项列表,信不?
我就以物品合成为例来说明一下。
传统的物品合成需要几个物品列表,而利用整数,一个就轻松搞定。
下面说一下我的思路:
一、每一个可以作为素材的物品都有一个自定义值(整数),在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的。
新手的第一份像样的东西,欢迎批评与表扬。 |
评分
-
查看全部评分
|