我正在学习 vb.net ,所以我对此进行了很多搜索,但找不到解决方案。
我有一个数组:
{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536}
可以看出,它是以下2^n
序列。
如何以优化的方式获得总和与给定值匹配的所有数组?
示例:
答案 0 :(得分:1)
另一种选择是使用Convert.ToString()(将二进制数指定为2)将您的数字转换为二进制表示形式。然后简单地遍历字符串,对于遇到的每个“ 1”,根据当前位置计算等效的以2为底的幂。这种方法不需要2的幂的硬编码数组。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim values() As Integer = {64, 80, 162}
For Each value As Integer In values
Dim powers As List(Of Integer) = GetBinaryPowers(value)
Debug.Print(value & ": " & String.Join(", ", powers))
Next
End Sub
Private Function GetBinaryPowers(ByVal number As Integer) As List(Of Integer)
Dim powers As New List(Of Integer)
Dim strBinary As String = Convert.ToString(number, 2)
For i As Integer = 0 To strBinary.Length - 1
If strBinary(i) = "1" Then
powers.Add(Math.Pow(2, strBinary.Length - (i + 1)))
End If
Next
Return powers
End Function
输出:
64: 64
80: 64, 16
162: 128, 32, 2
答案 1 :(得分:0)
您可以使用以下函数获取包含序列中所有数字的import numpy
import cv2
import os
from math import *
def generate(f,a,b,min,max,functionname='noname'):
ph=(b-a)/1920
pv=(max-min)/1080
picture=numpy.zeros((1080,1920))
for i in range(0,1920):
picture[1079-(int((f(a+(i+1)*ph)*1080/max))),i]=255
for i in range(1920):
picture[1079-(int((f(a+(i+1)*ph)*1080/max)))+1,i]=255
cv2.imwrite(functionname+'.png',picture)
with open("function.py",'w') as file:
f=input('enter the funtion you want to draw example: or e**x :\n')
file.write("from math import *\ndef f(x):\n\treturn "+f)
from function import f
os.remove("function.py")
d=input('enter the interval ,min ,max and the image file name. Separate characters with spacebar. Example: 0 1 0 14 exponontielle :\n').split(" ")
generate(f,int(d[0]),int(d[1]),int(d[2]),int(d[3]),d[4])
数组:
Integer
答案 2 :(得分:0)
Dim number As Int64 = 162
Dim factor As Integer = 0
Dim power As Int64
Dim numbers As New List(Of Int64)
Do
power = 2 ^ factor
If power > number Then
Exit Do
End If
If (number And power) = power Then
numbers.Add(power)
End If
factor += 1
Loop