任意给出一个正整数N,构造一个数组arr

1.构造一个数组

任意给出一个正整数N,构造一个数组arr,
对于i<k<j,满足arr[i] + arr[j] != 2*arr[k].

解题思路:

假设现在有一个满足条件的数组arr,从而:

2arr[i]-1 + 2arr[j] != 2(arr[k]+1)

2arr[i] + 2arr[j] != 2(2arr[k])

从而将arr映射到奇数列和偶数列中,分别得到arr_1 和arr_2,这两个数组也是满足条件的数组。

更新arr后也是满足条件的,arr如下式更新,变为原先2倍长度的数组:

arr = arr_1 + arr_2

当i,k,j都位于arr_1和arr_2中,满足条件;
当i位于arr_1,j位于arr_2时,arr[i]为奇数,arr[j]为偶数,故arr[i]+arr[j]为奇数,而2arr[k]为偶数,故:
arr[i] + arr[j] != 2*arr[k]
n=1,arr=[1]就满足;
n=2,做奇偶映射,可以变为长度为2的数组;
n=3,做奇偶映射,可以变为长度为4的数组;
...
n=n,做奇偶映射,可以变为长度为np.low(2,n)的数组;

需要更新的的次数为:
n = math(math.log(N,2))

为了保持与N长度一致:

arr = arr[:N]

程序:

import math

def creatArray(N):
    arr = [1]
    if N == 1:
        return arr

    sq = math.ceil(math.log(N,2))

    for i in range(sq):
        arr_1 = [2*i-1 for i in arr]
        arr_2 = [2*i for i in arr]
        arr = arr_1 + arr_2

    arr = arr[:N]
    return arr

def proof(arr):
    for i in range(len(arr)-2):
        for k in range(i+1,len(arr)-1):
            for j in range(k+1,len(arr)):
                if arr[i] + arr[j] == 2*arr[k]:
                    print('Faield!')
                    return 

    print('Sucessed!')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值