获取一个从0到n的数字列表,其中没有相邻的连续数字并且数字的值不等于它的索引

Posted

技术标签:

【中文标题】获取一个从0到n的数字列表,其中没有相邻的连续数字并且数字的值不等于它的索引【英文标题】:Getting a list of numbers from 0 to n, which has no adjacent consecutive numbers and the value of the number is not equal to its index 【发布时间】:2017-09-20 14:03:54 【问题描述】:

所以,我想要一个函数返回一个列表 (l),它的值是 (0, 1, 2, 3, ... , n),但连续的数字不能彼此相邻。并且数字的值不能等于它的索引。

例如。对于 n = 4,

def main(n)
    ---code goes here---
    return l
print(main(4))
>>>[1, 3, 0, 2]

非常感谢

编辑: 到目前为止我已经写了这么多,但我不确定我是否走在正确的轨道上......

def sameRowColumn(lst):
    for i in range(len(lst)):
        if i == lst[i]:
            return True
def sameDiagonal(lst):
    for i in range(len(lst)):
        for j in range(len(lst)):
            if i != j:
                if i + lst[i] == j + lst[j] or i - lst[i] == j - lst[j]:
                    return True
# def backTrack(lst1, lst2, dist):
#     for i in range(len(lst1)-1, (len(lst1)-1)-dist, -1):
#         lst2.append(lst1[i])
#         lst1.remove(lst1[i])

def queensList(N):
    l = []
    nums = [i for i in range(N)]
    while len(l) != N and len(nums) != 0:
        l.append(nums[0])
        print(l, nums)
        if sameRowColumn(l) or sameDiagonal(l):
            l.remove(nums[0])
            nums.insert(len(nums), nums.pop(0))
            print(l, nums)
        else:
            nums.remove(nums[0])
            print(l, nums)
    return l, nums

print(queensList(4))

【问题讨论】:

先表现出自己的努力。你做了什么来解决这个问题? @WillemVanOnsem 在这里,我添加了到目前为止我编写的代码。我很抱歉!我是这个网站的新手。 @hvrc 检查我的答案是否有效 【参考方案1】:

这在 python 3.6 中测试过

这会打印所有奇数,然后打印所有偶数,如果最后一个偶数等于我们交换 n-1 和 n 的索引

n=input("Enter ur number: ")
n = int(n)
l =[0]*n
y=1
z=0
for x in range(n):
    if y<=n and x+1<=n/2:
        l[x]=y
        y=y+2
    else:
        if(x==z):
            l[x]= l[x-1]
            l[x-1] = z
            z=z+2
        else:
            l[x]=z
            z=z+2
print(l)

【讨论】:

你为什么要解决 OP 显示零努力的明显作业? 也许操作员无法解决它,他需要帮助,我喜欢解决问题并且是免费的 通常政策是在 OP 提供自己的尝试之前不回答作业问题。否则,我们会吸引越来越多正在寻找简单方法来解决家庭作业的懒惰学生。 哦,我下次会继续的 @WillemVanOnsem 他添加了他迄今为止编写的代码顺便说一句,请参阅编辑后的问题

以上是关于获取一个从0到n的数字列表,其中没有相邻的连续数字并且数字的值不等于它的索引的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中,如何有效地找到列表中不一定相邻的最大连续数字集?

打印可以等于给定数字的所有 3 个连续数字

输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少

从Kotlin的数字列表中获取一对数字

有没有办法读取 C++ 中连续特定行上的数字?

c++ 怎样提取一个字符串中的连续数字并放到另一个数组中保存? 急!