پیدا کردن اعداد قرینه

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • zxcvbn

    • 2015/01/06
    • 72
    • 66.00

    پرسش پیدا کردن اعداد قرینه

    با سلام
    در یک ستون تعداد زیادی اعداد مثبت و منفی داریم که می دانیم مجموع 3 یا 4 یا چند عدد مثبت و منفی صفر خواهد شد . چگونه می توان آنها را پیدا کرد؟
    مثلا در یک ستون اعداد 2000 و 1000 و -3000 را پیدا کند که مجموع آنها می شود صفر
  • mrhartsclube

    • 2017/11/15
    • 130
    • 81.00

    #2
    سلام دوست عزیز

    این سوال راه حلهای خیلی زیادی داره، که همشون پیچیده هستن و الگوریتم نویسی لازم دارن.

    • من اگه بخوام حلش کنم با الگوریتم Greedy این کار رو انجام میدم که خب متاسفانه برای اینکه الگوریتم به حلقه بی نهایت نخوره به سادگی نمیشه همه حالتهای ممکن جمع چند عدد رو درآورد و در طول اجرای الگوریتم از تکرار محاسبه یه سری از اعداد جلوگیری میشه.
    • میشه با استفاده از Queue و Stack حلش کرد که بصورت ذهنی نمیتونم بگم همه حالتها بررسی میشن یا نه، و ممکنه بازم حالت بالا اتفاق بیفته.
    • میشه هم از Search و Sort استفاده کرد که بازم واقعا نمیدونم الگوریتمش به چه شکل میشه تا ننویسمش
    • و ...


    از اونجا که با وجود اینکه صورت سوال بنظر راحت میرسه ولی برای بدست آوردن همه حالتها یه الگوریتم درست و درمون لازمه اگه واقعا حیاتیه و راه دستی ای برای انجامش نیست بفرمایین که با کمک هم حلش کنیم.
    [CENTER][COLOR=#696969][FONT=lucida console]... [B]Programming [/B]C# - VB.Net - VC++ - ASP.Net - HTML - CSS - JS - AS2 - AutoIt - Pascal - Delphi - PHP - Python - VBA - Etc
    [/FONT][/COLOR][SIZE=2][FONT=lucida console][COLOR=#808080]... 2D & 3D [B]Graphic Designer[/B][/COLOR][COLOR=#ff0000][B]|[/B][/COLOR][COLOR=#808080] 2D & 3D [B]Animator [/B][/COLOR][COLOR=#ff0000][B]|[/B][/COLOR][COLOR=#808080] [B]Game [/B]Designer & [B]Hacker [/B][/COLOR][COLOR=#ff0000][B]|[/B][/COLOR][COLOR=#808080] Data [B]Forensic [/B]Expert [/COLOR][COLOR=#ff0000][B]|[/B][/COLOR][COLOR=#808080] [B]Ethical [/B]Hacker [/COLOR][COLOR=#ff0000][B]|[/B][/COLOR][COLOR=#808080] [B]Pen[/B] Tester

    [/COLOR][/FONT][/SIZE][COLOR=#ff0000][FONT=courier new][SIZE=4][B].: Expert in doing what nobody else can :.[/B][/SIZE][/FONT][/COLOR][/CENTER]

    کامنت

    • M_ExceL

      • 2018/04/23
      • 677

      #3
      نوشته اصلی توسط zxcvbn
      با سلام
      در یک ستون تعداد زیادی اعداد مثبت و منفی داریم که می دانیم مجموع 3 یا 4 یا چند عدد مثبت و منفی صفر خواهد شد . چگونه می توان آنها را پیدا کرد؟
      مثلا در یک ستون اعداد 2000 و 1000 و -3000 را پیدا کند که مجموع آنها می شود صفر
      سلام
      برای یافتن اعداد سه تایی در یک آرایه که مجموع سه عدد صفر باشد از کد زیر طبق فایل پیوست استفاده کنید :
      کد:
      Sub M_ExceL()
      Dim A As Variant
      lstr = Cells(Rows.Count, 1).End(3).Row + 1
      Range("d2:d" & lstr).ClearContents
      With ActiveWorkbook.Worksheets("Sheet1").Sort
          .SetRange Range("A1:A" & lstr)
          .Header = xlYes
          .MatchCase = False
          .Orientation = xlTopToBottom
          .SortMethod = xlPinYin
          .Apply
      End With
      A = Range("a1:a" & lstr).Value
      c = 2
      For i = 1 To UBound(A) - 2
          Left_a = i + 1
          right_a = UBound(A) - 1
          If i <> 1 And A(i, 1) = A((UBound(A) + 1) - i, 1) Or i = 1 Then GoTo continue
              Do While Left_a < right_a
                  If A(Left_a, 1) + A(right_a, 1) = -A(i, 1) Then
                      Cells(c, 4) = Str(A(i, 1)) + " , " + Str(A(Left_a, 1)) + " , " _
                      + Str(A(right_a, 1))
                      Left_a = Left_a + 1
                      right_a = right_a - 1
                      Do While A(Left_a, 1) = A(Left_a - 1, 1) And Left_a < right_a
                      Left_a = Left_a + 1
                      Loop
                      Do While A(right_a, 1) = A(right_a + 1, 1) And Left_a < right_a
                      right_a = right_a - 1
                      Loop
                      c = c + 1
                  ElseIf A(Left_a, 1) + A(right_a, 1) < -A(i, 1) Then
                      Left_a = Left_a + 1
                  Else
                      right_a = right_a - 1
                  End If
       
              Loop
      continue:
      Next
      
      End Sub
      توضیح :
      در فایل پیوست ابتدا ماکرو را فعال کنید سپس روی باتنی که گذاشتم کلیک کنید و نتیجه را بررسی کنید.
      یا حق.
      فایل های پیوست شده
      [CENTER]Telegram Channel : [url]https://t.me/UltraOfficeSkills[/url]
      [/CENTER]

      کامنت

      چند لحظه..