首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找一种用数学处理列表的算法

寻找一种用数学处理列表的算法
EN

Stack Overflow用户
提问于 2014-08-28 17:29:38
回答 1查看 59关注 0票数 0

我有一张号码表。我不是把它们都画成一行,而是把列表画成5行。

现在,我可以选择一个数字,从那里移动左,右,上或下。

在这15个数字(索引0到14)的列表中,我选择了索引11,红色。

如果我向左移动,我必须从我选择的索引中减去1。如果我向右移动,我加1。向下表示我加5,向上表示我减去5。

但是,如果我在最底层的行中向下走,我想以这样的方式结束第一行:

这方面的数学/算法很简单:

代码语言:javascript
运行
复制
index += 5;
if (index > list.size() ) index = index % 5;   // % is modulo

//So, since I start with index 11: (11 + 5) % 5 = 1, which is the index of 01.

然而,我似乎不知道当我从最上面的那一排往上走的时候该怎么做,这就把我带到了最底层的那一排。(从01起我将在11点结束)

如果我有一个精确的15项清单,那么我可以简单地做:

代码语言:javascript
运行
复制
index -= 5;
if (index < 0) index += index.size(); 

//So:  1 - 5 = -4
//    -4 + 15 = 11.

但是,如果我的列表不能被5除,那么这是行不通的。

因此,我正在寻找一个算法来解决这个问题在所有情况下,包括当一个列表的大小是不可除以它的行长度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-28 17:37:03

这可能会进一步优化,但这里有一种方法:

代码语言:javascript
运行
复制
var fullRows = list.Length / NUM_COLUMNS; //using integer division
var maxPos = fullRows * NUM_COLUMNS + currentIndex;
return maxPos < list.Length ? maxPos : maxPos - NUM_COLUMNS;

这样做是获得完整的行数,然后从假设后面还有一个行开始。然后,它检查该位置是否真的存在,如果不存在,则将一行退到最后的完整行中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25554701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档