Tổng các số lẻ liên tiếp


24

Mặc dù những thách thức liên quan đã được đặt ra, nhưng điều này là khác nhau để đảm bảo câu hỏi của riêng mình.


Thử thách

Cho một số nguyên dương, trả về chuỗi dài nhất các số nguyên dương dương liên tiếp có tổng là số nguyên đã cho. Nếu không có trình tự như vậy tồn tại, bạn có thể báo cáo lỗi theo bất kỳ cách nào có ý nghĩa đối với ngôn ngữ của bạn, bao gồm trả về giá trị giả hoặc ném ngoại lệ.

Các trường hợp thử nghiệm

  1 -> [1]
  2 -> []
  3 -> [3]
  4 -> [1, 3]
  5 -> [5]
  6 -> []
  9 -> [1, 3, 5] (lưu ý rằng [9] không phải là câu trả lời hợp lệ)
 15 -> [3, 5, 7]
104 -> [23, 25, 27, 29] (lưu ý rằng [51, 53] không phải là câu trả lời hợp lệ)

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng.


2
Chương trình của tôi có thể chạy mãi mãi nếu không có giải pháp?
Dennis

Rất liên quan . Thực tế là một số số chẵn không thể được biểu diễn trong số này có thể cứu nó khỏi bị lừa.
Sản xuất ETH

6
15 không thể cho [-1, 1, 3, 5, 7]? Nếu chỉ cho phép các giá trị tích cực, bạn nên nói như vậy.
xnor

2
@ ВгенийiTовиков bạn đã bỏ qua 17
kalsowerus

1
@kalsowerus có. Tôi hiểu sai từ "liên tiếp"
Евгений Новиков

Câu trả lời:


11

Haskell, 67 65 63 62 58 byte

Đã lưu 4 byte nhờ Julian Wolf

f x=[[2*n+1,2*n+3..2*m]|n<-[0..x],m<-[n..x],m^2-n^2==x]!!0

Hãy thử trực tuyến!

Tôi kiểm tra xem số có thể được biểu thị bằng số chênh lệch của hai hình vuông không : m^2-n^2. Sau đó tôi có thể xây dựng danh sách các số lẻ liên tiếp : [2n+1,2n+3...2m-1]. Lưu ý rằng vì tối thiểu nđược chọn, danh sách dài nhất sẽ là đầu ra


7
Bỏ phiếu xuống: Sẽ thân thiện hơn và mang tính xây dựng hơn khi thêm nhận xét đưa ra lý do của bạn, đặc biệt là khi bỏ phiếu xuống cho người dùng mới.
Jonathan Allan

1
Trừ khi tôi thiếu thứ gì đó, bạn có thể tiết kiệm 4 byte bằng cách chỉ tăng lên xcho cả hai nm
Julian Wolf

Để bạn biết, downvote được người dùng Cộng đồng tự động bỏ khi bạn chỉnh sửa câu trả lời của mình. Tôi coi đây là một lỗi . (CC @Jonathan ALLan)
Dennis

Ahh, đó là một trong số đó.
Jonathan Allan

9

Python 2 , 66 62 byte

f=lambda n,k=0,*r:n-sum(r)and f(n,k+1,*range(k%n|1,k/n,2))or r

Thoát với RuntimeError (vượt quá độ sâu đệ quy tối đa) nếu không có giải pháp.

Hãy thử trực tuyến!


1
Nếu các giá trị đầu vào đủ cao, nhưng có một giải pháp, điều này có dẫn đến RuntimeError không?
Okx

Nếu giới hạn đệ quy không đủ cao và / hoặc ngăn xếp không đủ lớn, vâng. Tuy nhiên, thông thường bỏ qua các giới hạn vật lý (ví dụ: câu trả lời C chỉ phải hoạt động cho int 32 bit) và OP nói rõ ràng rằng chạy mãi mãi là chấp nhận được nếu không có giải pháp.
Dennis

9

Thạch ,  11  10 byte

-1 byte nhờ Dennis (sử dụng cấu trúc phạm vi ẩn của - thay thế Rm2Ẇbằng ẆḤ’)

ẆḤ’S_¥Ðḟ⁸Ṫ

Một liên kết đơn âm trả về một danh sách các summon nếu có thể, hoặc 0nếu không.

Hãy thử trực tuyến!

Làm sao?

ẆḤ’S_¥Ðḟ⁸Ṫ - Link: number, n
Ẇ          - all sublists (implicit range of input) note: ordered by increasing length
           -                i.e. [[1], [2], [3], ..., [1,2], [2,3], ..., [1,2,3], ...]]
 Ḥ         - double              [[2], [4], [6], ..., [2,4], [4,6], ..., [2,4,6], ...]]
  ’        - decrement           [[1], [3], [5], ..., [1,3], [3,5], ..., [1,2,5], ...]]
        ⁸  - link's left argument, n
      Ðḟ   - filter out items for which the following yields a truthy value:
     ¥     -   last two links as a dyad:
   S       -     sum
    _      -     subtract the right from the left = sum - n
         Ṫ - tail (last and hence longest such run)

1
ẆḤ’tiết kiệm một byte.
Dennis

8

JavaScript (ES7), 87 86 85 81 byte

Trả về danh sách các số nguyên được phân cách bằng dấu phẩy hoặc 0nếu không có giải pháp nào tồn tại.

n=>(g=(s,k,x=n+s)=>(x**.5|0)**2-x?k>n?0:g(s+k,k+2):(n-=k)?k+','+g(-n,k+2):k)(0,1)

Làm sao?

Chúng tôi nhìn đầu tiên cho hoàn hảo vuông nhỏ s như vậy x = n + s là một hình vuông hoàn hảo.

Nếu s tồn tại, n là chênh lệch x - s của 2 hình vuông hoàn hảo, có thể được viết là hiệu của 2 dãy số lẻ liên tiếp. Chúng tôi sau đó xây dựng danh sách kết quả.

Thí dụ:

Dành cho n = 104 :

Ta thấy s = 11² = 121 thỏa mãn x = n + s = 225 = 15²

Sau đó:

15² = 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21 + 23 + 25 + 27 + 29
11² = 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21
104 = 15² - 11² = 23 + 25 + 27 + 29


3
Đợi đã, bạn nói với tôi rằng n^2luôn luôn bằng tổng của các nsố lẻ đầu tiên ? Huh, thú vị
Skidsdev 7/07/17

2
@Mayube Thật vậy !
Arnauld


7

05AB1E , 9 8 byte

-1 byte nhờ Emigna

ÅÉŒʒOQ}н

Giải trình:

ÅÉ           Generate a list of odd numbers up to, and including, the input
  Œ          Substrings
   ʒ         Only keep values
    O          where the sum
     Q         equals the input
       }     End
             For 9, the result would look like this:
             [[1, 3, 5], [9]]
        н    Get the first value

Trên đầu vào không hợp lệ, đầu ra không có gì.

Hãy thử trực tuyến!


ʒOQ}thay vì DO¹QÏtiết kiệm một byte.
Emigna


1
@Jonathan ALLan Lỗi nhỏ. Đã sửa.
Okx

6

Haskell , 61 60 byte

Cảm ơn @maple_shaft đã loại bỏ 1 byte

f n=[k|r<-[1,3..],s<-[r,r+2..n],k<-[[r,r+2..s]],sum k==n]!!0

Hãy thử trực tuyến!

Sử dụng thực tế là lần chạy dài nhất sẽ luôn là lần chạy bắt đầu với số thấp nhất.

Tôi muốn làm một cái gì đó với số học thay vì vũ phu k, nhưng fromIntegerdường như để giết nó.


Bạn có thể tiết kiệm cho mình một byte bằng cách thay đổi [1,3..n]thành[1,3..]
maple_shaft

1
Bạn có thể lưu 7 byte với chức năng trợ giúp r?n=[r,r+2..n]. Hãy thử trực tuyến!
Ørjan Johansen

4

Python , 67 byte

f=lambda n,R=[1]:n-sum(R)and f(n,[R+[R[-1]+2],R[1:]][sum(R)>n])or R

Hãy thử trực tuyến!

Tôi đã sao chép câu trả lời của mình từ thử thách tổng liên tiếp trước đó và thay đổi +1thành+2 . Ai biết rằng mã golf có thể được mô-đun như vậy?

Một chiến lược đơn giản kỳ lạ: tìm kiếm khoảng Rvới số tiền mong muốn.

  • Nếu tổng quá nhỏ, hãy dịch chuyển điểm cuối bên phải của khoảng lên 2 bằng cách nối thêm số 2 tiếp theo phía trên nó.
  • Nếu tổng quá lớn, hãy dịch chuyển điểm cuối bên trái bằng cách loại bỏ phần tử nhỏ nhất
  • Nếu tổng là chính xác, đầu ra R.

Vì đầu dưới của khoảng chỉ tăng, nên các khoảng dài hơn được tìm thấy trước các khoảng ngắn hơn. Nếu không thể tìm thấy khoảng thời gian có thể, hãy chấm dứt với IndexError.


4

JavaScript (ES6), 65 64 byte

f=(a,i=1)=>a>i?(c=f(a-i,i+=2))[0]==i?[i-2,...c]:f(a,i):a<i?0:[i]

Trả về một mảng nếu có giải pháp hoặc 0 không có giải pháp.

Đây là một giải pháp golf không hiệu quả cao cho vấn đề.

Nó tìm kiếm giải pháp đầu tiên bằng cách sử dụng a-ii=1, ngay cả khi nó không hoạt động với ngăn xếp đệ quy. Nếu giải pháp đó không bắt đầu i+2, thì chúng tôi sẽ tìm kiếm giải pháp đầu tiên bằng cách sử dụng ai+2.

Bị đánh cắp

f=(a,i=1)=>
  a > i ? 
    (c = f(a - i, i += 2))[0] == i ? 
      [i-2, ...c] : 
      f(a, i) :
  a < i ? 
    0 :
    [i]

Các trường hợp thử nghiệm:

Đối với một ý tưởng về cách thức này không hiệu quả, giải pháp f(104)yêu cầu 69.535 cuộc gọi đệ quy. Ngăn xếp không bao giờ sâu hơn 51 cấp, vì vậy không có vấn đề gì với stack stack.

Giải pháp f(200)yêu cầu 8,6 triệu cuộc gọi đệ quy, với một ngăn xếp sâu 99 cấp. (Giải pháp của nó là[11,13,15,17,19,21,23,25,27,29] .)

Đây là một đại diện trực quan của chương trình đang chạy:


3

Python 2.7, 109 108 97 byte

Giảm 11 byte, Nhờ Erik the Outgolfer.

Đây là mã golf đầu tiên của tôi!

def f(N):
 for n in range(N):
    x=(n*n+N)**.5-n
    if x%1==0:return[2*(k+n)+1for k in range(int(x))]

Làm thế nào nó hoạt động

Tôi đã sử dụng danh tính nổi tiếng rằng 1 + 3 + 5 + ... + (2n - 1) = n²

Chăm sóc 15

15 = 3 + 5 + 7 = (1 + 2) + (3 + 2) + (5 + 2) = (1 + 3 + 5) + 3×2 = 3² + 3×2

Nói chung, nếu có x điều khoản bắt đầu từ 2n + 1, như

(2n + 1) + (2n + 3) + (2n + 5) ... (2n + (2x-1))


Nó bằng 2nx + x²

Nếu Nlà số nguyên đầu vào, vấn đề giảm xuống để tìm tối đa xsao cho

x² + 2nx - N = 0

Đó là một phương trình bậc hai với giải pháp

x = sqrt(n² + N) - n

Chuỗi dài nhất là một với lớn nhất x. Chương trình lặp ntừ 0đến Nvà khi tìm thấy đó xlà một số nguyên, nó tạo ra một danh sách (2n + 1) + (2n + 3) + (2n + 5) ... (2n + (2x-1))và trả về nó.



@EriktheOutgolfer, Cảm ơn, tôi đã quên sử dụng các tab (=
dark32

3

Python 3, 190 81 byte

def c(q,l,i):
    if sum(l)0:
        l.append(i)
        return c(q,l,i+2)
    elif sum(l)>q:
        l.pop(0)
        return c(q,l,i)
    else:
        print(l)
c(q,[1],1)

c=lambda q,l=[1]:c(q,l+[l[-1]+2])if(sum(l)<q)*l else c(q,l[1:])if sum(l)>q else l

Cảm ơn @ovs và @ musicman523


4
Bạn có thể giảm xuống còn 122 byte chỉ bằng cách xóa một số vết lõm . Nếu bạn muốn rút ngắn mã của mình hơn nữa, hãy xem Mẹo để chơi gôn trong Python .
trứng

3
Điều này không chạy trong Python 3, vì lệnh gọi printbị thiếu dấu ngoặc đơn
musicman523

2
Bạn có thể loại bỏ l.append(i)bằng cách sử dụng đơn giản l+[i]trong cuộc gọi đệ quy. Bạn có thể loại bỏ l.pop(0)bằng cách sử dụng l[1:]trong cuộc gọi đệ quy. Bạn có thể xóa cuộc gọi đến ctận cùng bằng cách sử dụng đối số từ khóa thay thế. Bạn có thể xóa >0trên dòng 2. Cuối cùng, bạn có thể thay đổi các câu lệnh ifelsecâu lệnh của bạn thành các biểu thức, bằng cách sử dụng biểu mẫu ternary, giúp bạn giảm xuống còn 92 byte dưới dạng biểu thức lambda. Hãy thử trực tuyến!
sĩ523

1
Dựa trên các đề xuất @ musicman523, chúng tôi vẫn có thể rút ngắn các điều kiện và thả xuống iđể có tổng cộng 81 byte .
trứng

Tôi nghĩ rằng bạn có thể thay đổi sum(l)>q elseđể q<sum(l)elsetiết kiệm 1 byte.
Zacharý

2

QBIC , 47 byte

{_Cg=q┘q=q+2~g>:|_Xp\?g,[q,a,2|?b,┘g=g+b~g=a|_X

Điều này cố gắng đếm tất cả các số lẻ từ một cho đến khi tổng của nó là n. Nếu nó vượt qua n, đặt lại vòng lặp, tăng 1 lên 3 và thử lại. Thoát, in 0, nếu ở đầu vòng lặp số của chúng tôi> n .

Giải trình

{       Do infinitely
_C      Clear the screen (we basically print every run of odd numbers, but clear out everything that doesn't sum up to n)
g=q     Set g to the first num of this cycle (q starts as 1 in QBIC)    
┘       (Syntatcic linebreak)
q=q+2   Raise q to the next odd number, this sets up both the next outer loop as well as a coming FOR loop
~g>:|   If we start out with a number > n (read as 'a' from the cmd line)
_Xp     THEN quit, printing 0 (the value of the number var 'p')
\       ELSE
[q,a,2| FOR b = q, b <= n, b+=2
?b,┘    PRINT b followed by a tab
g=g+b   Add 'b' to running total 'g'
~g=a|   and if that lands us on 'n'
_X      QUIT (printing nothing: everything is already printed)

1

R , 90 byte

f=function(x,y=1)'if'(length(w<-which(cumsum(r<-y:x*2-1)==x)),r[1:w],'if'(y>x,0,f(x,y+1)))

Hãy thử trực tuyến!

Sử dụng hàm đệ quy kiểm tra tổng tích lũy của y: x được chuyển đổi thành một chuỗi số lẻ. y được tăng lên trên mỗi lần đệ quy cho đến khi vượt quá x. Chuỗi đầu tiên tính tổng cho mục tiêu sẽ được trả về.


1

Python 2 , 89 byte

lambda n,r=range:[v for v in[r(1,n+1,2)[i:j]for i in r(n)for j in r(n+1)]if sum(v)==n][0]

Một hàm không tên lấy một số nguyên dương nvà trả về kết quả nếu nó tồn tại và tăng một giá trị IndexErrorkhác.

Hãy thử trực tuyến!

Tạo một danh sách tất cả các số lẻ có liên quan với r(1,n+1,2)đó là range(start=1, stop=n+1, step=2); tạo ra tất cả các sub-lát có liên quan (cộng với một số những người có sản phẩm nào) bằng cách cắt mà từ itoàn diện để jđộc quyền với [i:j]bên kia itrong [0, n) sử dụng r(n)jtrong [0, n] sử dụng r(n+1)(những người có sản phẩm nào khi i>=jhoặc ivượt quá giới hạn); bộ lọc cho những người có tổng chính xác với if sum(v)==n; trả về lát đầu tiên (và do đó dài nhất) như vậy bằng cách sử dụng [0].




1

PHP , 73 byte

không có giải pháp nào là một vòng lặp vô hạn

for($e=-1;$s-$i=$argn;)$s+=$s<$i?$n[]=$e+=2:-array_shift($n);print_r($n);

Hãy thử trực tuyến!

PHP , 83 byte

không có gì để giải quyết

mọi mod đầu vào 4 == 2 không có giải pháp

for($e=-1;($i=$argn)%4-2&&$s-$i;)$s+=$s<$i?$n[]=$e+=2:-array_shift($n);print_r($n);

Hãy thử trực tuyến!


không phát hiện đầu vào không thể giải quyết
Titus

@Titus đã sửa ...
Jörg Hülsermann

0

Python 2 , 122 121 119 115 byte

-1 byte nhờ nhạcman523. -4 byte nhờ Bước Hen. haha

def f(n,R=range):r=R(1,n,2);print[i for w in R(1,len(r)+1)for i in[r[j:j+w]for j in R(len(r)-w+1)]if sum(i)==n][-1]

Hãy thử trực tuyến!


1
Đây là một byte ngắn hơn như là một chức năng. Hãy thử trực tuyến!
sĩ523

Lưu byte nếu bạn xác định lại range, Hãy thử trực tuyến!
Stephen

Điều này không thành công cho 1 .
Dennis

0

Python 3 , 93 byte

lambda n,r=range:[[*r(s,e+1,2)]for s in r(1,n+1,2)for e in r(s,n+1,2)if(s+e)*(2+e-s)==4*n][0]

Hãy thử trực tuyến!

Điều đặc biệt tôi đã làm là lưu ý rằng (s+e)*(2+e-s)==4*nnó tương đương với sum(range(s,e+1,2))==n, và mặc dù chúng có cùng kích thước khi r=range, cái trước có thể được đặt gần hơn với iftuyên bố.


0

Python 3 , 185 byte

def f(s):
  d={k:v for k,v in{a:(1-a+((a-1)**2+4*s)**(.5))/2 for a in range(1,s,2)}.items()if int(v)==v};m=max(d.keys(), key=(lambda k: d[k]));return list(range(int(m),int(m+2*d[m]),2))

Hãy thử trực tuyến!


Về cách thức hoạt động của nó, tôi đã cố gắng tìm kiếm một giải pháp tao nhã hơn một chút so với tìm kiếm vũ lực đơn giản. Tôi sắp xếp lại công thức tính tổng của một chuỗi số học và áp dụng công thức bậc hai để có được biểu thức (1-a+((a-1)**2+4*s)**(.5))/2, xuất hiện trong mã. Biểu thức tính toán là gì, được đưa ra một tổng mong muốn svà một thuật ngữ đầu tiên cho chuỗi số họca , độ dài của chuỗi. Các độ dài này được lưu trữ trong một từ điển dưới dạng các giá trị cho các điều khoản đầu tiên dưới dạng các khóa.

Tiếp theo, tất cả các giá trị không nguyên được xóa khỏi từ điển, vì các giá trị này biểu thị các chuỗi không hợp lệ. Từ đó, giá trị lớn nhất được xác định max(d.keys(), key=(lambda k: d[k]))và chuỗi các số lẻ tại vị trí đó và tại độ dài đó được thực hiện với list(range(int(m),int(m+2*d[m]),2)).


Tôi đang tìm kiếm sự giúp đỡ chơi golf này nếu bạn thấy bất cứ điều gì. Tôi đã quan tâm nhiều hơn đến việc xem tôi có thể làm tốt như thế nào với một thuật toán không tầm thường; Câu trả lời của tôi dài gần gấp đôi giải pháp Python tốt nhất.


Điều này sẽ làm việc? repl.it/JTt7 (177 byte)
Zacharý

0

Toán học, 56 byte

Last@Cases[Subsequences@Table[n,{n,1,#,2}],x_/;Tr@x==#]&

Functionvới lập luận đầu tiên #. Table[n,{n,1,#,2}]tính toán danh sách các số lẻ dương nhỏ hơn hoặc bằng #. Subsequencestrả về tất cả các phần sau của danh sách đó được sắp xếp theo chiều dài tăng. Sau đó, chúng tôi lấy Caseskết quả khớp x_/;Tr@x==#, nghĩa là các chuỗi xsao cho tổng của chúng Tr@xbằng với đầu vào #. Chúng tôi sau đó thực hiện Lasttrình tự như vậy.


0

JavaScript (ES6), 72 byte

n=>(g=s=>s?s>0?g(s-(u+=2)):g(s+l,l+=2):u-l?l+' '+g(s,l+=2):u)(n-1,l=u=1)

Trả về một chuỗi số lẻ được phân tách bằng dấu cách hoặc ném vào đầu vào không hợp lệ. Phiên bản 84 byte trả về một mảng (trống khi thích hợp):

n=>n%4-2?(g=s=>s?s>0?g(s-(u+=2)):g(s+l,l+=2):u-l?[l,...g(s,l+=2)]:[u])(n-1,l=u=1):[]

Giải thích: Dựa vào giải pháp awk của @ Cabbie407 cho Tổng số nguyên liên tiếp ngoại trừ tôi có thể lưu một số byte bằng cách sử dụng đệ quy.


0

PHP, 78 byte

for($b=-1;$s-$argn;)for($n=[$s=$x=$b+=2];$s<$argn;)$s+=$n[]=$x+=2;print_r($n);

vòng lặp vô hạn nếu không có giải pháp. thay vào ?$b>$argn+2?$n=[]:1:0đó $s-$argnđể in mảng trống thay thế.

Chạy với -nRhoặc thử trực tuyến .


0

C # (.NET Core) , 129 byte

(i)=>{int s,j,b=1,e=3;for(;;){var o="";s=0;for(j=b;j<e;j+=2){s+=j;o+=j+" ";}if(s==i)return o;s=s<i?e+=2:b+=2;if(b==e)return"";}};

Xuất ra các số trong một chuỗi, được phân cách bằng dấu cách (bất kỳ ký tự nào khác sẽ chỉ yêu cầu thay đổi " " ). Đầu vào không có giải pháp trả về một chuỗi rỗng (mặc dù nếu chạy mãi mà không có lỗi là một cách hợp lệ để chỉ ra không có giải pháp nào thì 17 byte có thể được lưu bằng cách xóaif(b==e)return""; ).

Thuật toán là:

  1. Bắt đầu với [1]
  2. Nếu tổng bằng với mục tiêu, trả về danh sách
  3. Nếu tổng nhỏ hơn mục tiêu, hãy thêm số lẻ tiếp theo
  4. Nếu tổng lớn hơn mục tiêu, hãy xóa mục đầu tiên
  5. Nếu danh sách trống, hãy trả lại
  6. Lặp lại từ 2

Bạn có thể viết (i)=>nhưi=>
aloisdg nói Phục hồi lại

0

C ++, 157 -> 147 byte


-10 byte nhờ DJMcMayhem

sẽ trả về 0 nếu không có câu trả lời, 1 nếu không

dòng cuối cùng nó in là câu trả lời

int f(int n){for(int i=1;;i+=2){int v=0;for(int k=i;;k+=2){v+=k;std::cout<<k<<" ";if(v==n)return 1;if(v>n)break;}if(i>n)return 0;std::cout<<"\n";}}

vô dụng:

int f(int n)
{
    for (int i = 1;; i += 2)
    {
        int v = 0;
        for (int k = i;; k += 2)
        {
            v += k;
            std::cout << k << " ";
            if (v == n)
                return 1;
            if (v > n)
                break;

        }
        if (i > n)
            return 0;
        std::cout << "\n";
    }
}

đây là mã golf đầu tiên của tôi ^^


Bạn có thể lưu một số byte nếu bạn biến nó thành hàm int và trả về 0 hoặc 1. Ngoài ra, bạn có thể thực hiện int v=0;thay vì int v;....v=0;và nếu bạn tạo đầu ra Newline được phân tách, bạn có thể thực hiện std::cout<<k<<"\n";và sau đó xóa hoàn toàn Dòng mới thứ hai
DJMcMayhem

Nếu tôi đã thực hiện lần giới thiệu cuối cùng thì nó sẽ in một dòng mới trên mỗi số nhưng tôi muốn tách riêng các nhóm số, nhưng dù sao cũng cảm ơn vì -10 Byte
SeeSoftware

0

Kotlin, 152 byte

fun f(a:Double){var n=Math.sqrt(a).toInt()+1;var x=0;while(n-->0){if(((a/n)-n)%2==0.0){x=((a/n)-n).toInt()+1;while(n-->0){println(x.toString());x+=2}}}}

Dùng thử trực tuyến (Đợi 4-5 giây, trình biên dịch chậm)

Bị đánh cắp

fun f(a: Double){
    var n=Math.sqrt(a).toInt()+1;
    var x=0;

    while(n-->0){
        if(((a/n)-n)%2==0.0){
            x=((a/n)-n).toInt()+1;

            while(n-->0){
                println(x.toString());
                x+=2;
            }

        }
    }
}

0

VBA Excel, 139 byte

Subthường trình lấy đầu vào ncủa số nguyên loại dự kiến ​​và báo cáo chuỗi dài nhất của các số lẻ liên tiếp đến ô[A1]

Sub a(n)
For i=1To n Step 2
s=0
For j=i To n Step 2
s=s+j
If s=n Then:For k=i To j-1 Step 2:r=r &k &"+":Next:[A1]=r &j:End
Next j,i
End Sub
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.