Javascript 伪编码辅助
来自viking code学校工程原理预科课程: 10个朋友围着桌子坐成一圈,决定玩一个新游戏。在这本书中,他们从1数到100。第一个人说1,第二个人说2,依此类推。。。但有几个陷阱: 每当这个数字可以被7整除时,它们就会切换方向。所以第六个人会说6,第七个人会说7,然后第六个人会说8。 当数字可以被11整除时,他们跳过下一个人 伪代码一个程序,将确定哪个玩家说100。Javascript 伪编码辅助,javascript,algorithm,data-structures,logic,pseudocode,Javascript,Algorithm,Data Structures,Logic,Pseudocode,来自viking code学校工程原理预科课程: 10个朋友围着桌子坐成一圈,决定玩一个新游戏。在这本书中,他们从1数到100。第一个人说1,第二个人说2,依此类推。。。但有几个陷阱: 每当这个数字可以被7整除时,它们就会切换方向。所以第六个人会说6,第七个人会说7,然后第六个人会说8。 当数字可以被11整除时,他们跳过下一个人 伪代码一个程序,将确定哪个玩家说100。 一个人是如何开始理解这个逻辑的 我所做的是创建一个for循环到100,内部有一个变量跟踪方向,另一个变量跟踪当前玩家。我在循环
一个人是如何开始理解这个逻辑的 我所做的是创建一个for循环到100,内部有一个变量跟踪方向,另一个变量跟踪当前玩家。我在循环中使用if语句来决定是切换方向,还是当前播放器递增或递减 这是我最后得到的结果,它不漂亮,但应该有用:
int curPlayer = 1;
int direction = 1;
for(int i = 1; i <= 100; i++)
{
if(i % 7 == 0 && direction == 1)
{
direction = 0;
}
else if(i % 7 == 0)
{
direction = 1;
}
if(i % 11 == 0 && direction == 1)
{
curPlayer++;
}
else if(i % 11 == 0)
{
curPlayer--;
}
if(direction == 1)
{
curPlayer++;
}
else
{
curPlayer--;
}
if(curPlayer > 10)
{
curPlayer = curPlayer - 10;
}
else if(curPlayer < 1)
{
curPlayer = curPlayer + 10;
}
}
return curPlayer;
通常在编程中,选择合适的数据结构可以大大简化解决特定问题的算法。你的问题可以用一个简单的方法优雅地解决。因为有十个朋友坐在一个圆圈里,我们将他们放入链接列表中,如下所示:
next +-------+ next
+--------->| |----------+
| | 1 | |
| +--| |<--+ v
+-------+ | +-------+ | +-------+
| | | | | |
+-->| 10 |<--+ prev prev +--| 2 |---+
| | | | | |
next | +-------+ +-------+ | next
| | ^ v
+-------+ | prev prev | +-------+
| | | | | |
| 9 |<--+ +---| 3 |
| | | |
+-------+ +-------+
^ | ^ |
next | | prev prev | | next
| v | v
+-------+ +-------+
| | | |
| 8 |---+ +-->| 4 |
| | | | | |
+-------+ | prev prev | +-------+
^ v | |
next | +-------+ +-------+ | next
| | | | | |
+---| 7 |--+ prev prev +-->| 5 |<--+
| | | | | |
+-------+ | +-------+ | +-------+
^ +-->| |--+ |
| | 6 | |
+----------| |<---------+
next +-------+ next
综上所述,答案是1:
var firstFriend=toList[1,2,3,4,5,6,7,8,9,10];
var answer=forward1,firstFriend;
警惕性回答;
函数Nodeprev,数据,下一步{
this.prev=prev;
这个数据=数据;
this.next=next;
}
函数tolistaray{
var length=array.length;
如果长度===0,则抛出新的Errorempty数组;
var root=new Nodenull,数组[0],null,node=root,i=1;
而i我已经解释了变量,而不是仅仅说明变量,但这似乎是多余的,并且不是解释算法的意思。谢谢不是为了让死后的东西复活,但我在将近一年后回来研究这个问题,我必须说,这是一个奇妙的解决方案。当时对我来说没有任何意义,但花时间研究数据结构,我自己也无法想出更好的解决方案!
next +-------+ next
+--------->| |----------+
| | 1 | |
| +--| |<--+ v
+-------+ | +-------+ | +-------+
| | | | | |
+-->| 10 |<--+ prev prev +--| 2 |---+
| | | | | |
next | +-------+ +-------+ | next
| | ^ v
+-------+ | prev prev | +-------+
| | | | | |
| 9 |<--+ +---| 3 |
| | | |
+-------+ +-------+
^ | ^ |
next | | prev prev | | next
| v | v
+-------+ +-------+
| | | |
| 8 |---+ +-->| 4 |
| | | | | |
+-------+ | prev prev | +-------+
^ v | |
next | +-------+ +-------+ | next
| | | | | |
+---| 7 |--+ prev prev +-->| 5 |<--+
| | | | | |
+-------+ | +-------+ | +-------+
^ +-->| |--+ |
| | 6 | |
+----------| |<---------+
next +-------+ next