Çözüldü Tekrarlı Permütasyon - Programlama

Konusu 'Matematik - Geometri' forumundadır ve Honore tarafından 26 Mayıs 2018 başlatılmıştır.

Yüklüyor...
  1. Honore

    Honore Yönetici Yönetici

    Mesajlar:
    11.053
    Beğenileri:
    652
    Cinsiyet:
    Bay
    Meslek:
    Müh. (Elk./Bilg.)
    502455 sayısındaki rakamların yerleri değiştirilerek 6 basamaklı 5 ile tam bölünebilen kaç doğal sayı yazılabilir?
    https://www.facebook.com/photo.php?fbid=1689565147823257&set=p.1689565147823257&type=1&theater

    Sonu 0 veya 5 ile biten sayılar 5 ile bölünebileceğinden;
    _ _ _ _ _ 0 sayılarının boşluklarına 2, 4, 5, 5, 5 olmak üzere 5 sayı 5! / (1!·1!·3!) = 20 sayı
    _ _ _ _ _ 5 sayılarının boşluklarına 0, 2, 4, 5, 5 olmak üzere 5 sayı 5! / (1!·1!·1!·2!) = 60 sayı
    0 _ _ _ _ 5 sayılarının boşluklarına 2, 4, 5, 5 olmak üzere 5 sayı 4! / (1!·1!·2!) = 12 sayı (bunlar sayı olarak kabul edilemeyeceğinden toplamdan çıkarılır)
    Sonuç: 20 + 60 - 12 = 68 sayı yazılabilir.
     
    : Fortran

  2. Benzer Konular: Tekrarlı Permütasyon
    Forum Başlık Tarih
    Polinomlar, Permütasyon, Kombinasyon, Olasılık ve Binom Açılımı Faktöriyel - Tekrarlı Permütasyon - Kombinasyon - Olasılık - Rasyonel Sayılarla Sadeleştirme 13 Temmuz 2024
    Polinomlar, Permütasyon, Kombinasyon, Olasılık ve Binom Açılımı Tekrarlı Permütasyon - Olasılık 21 Mayıs 2022
    Polinomlar, Permütasyon, Kombinasyon, Olasılık ve Binom Açılımı Tekrarlı Permütasyon 3 Aralık 2021
    Matematik - Geometri Tekrarlı Permütasyon 12 Mayıs 2017
    Matematik - Geometri Tekrarlı Permütasyon 10 Mayıs 2017

  3. Honore

    Honore Yönetici Yönetici

    Mesajlar:
    11.053
    Beğenileri:
    652
    Cinsiyet:
    Bay
    Meslek:
    Müh. (Elk./Bilg.)
    www.mathful.com yapay zekâsının çözümünün özeti aşağıda, incelemesinin tamamı ise ekteki dosyadadır:
    [​IMG]
    https://i.ibb.co/JwdY6CK6/502455-Mathful-AI.png
    ---
    Bilgisayar programlamayla ilgilenen öğrenciler için:

    www.codingfleet.com yapay zekâsının altyordam kullanımıyla yazdığı ve sayıları ekrana listeleyen program:
    Kod:
    ! A Fortran program written by the AI at https://codingfleet.com/code-generator/fortran/
    ! to list all six-digit numbers divisible by five that can be formed by
    ! changing the places of the digits of the number 502455.
    
    program perm_div5
      implicit none
    
      integer, parameter :: n = 6
      integer :: digits(n)
      logical :: has_next
      integer :: i, num, count
    
      digits = (/ 0, 2, 4, 5, 5, 5 /)
      count = 0
    
      do
        if (digits(1) /= 0 .and. (digits(n) == 0 .or. digits(n) == 5)) then
          num = 0
          do i = 1, n
            num = num * 10 + digits(i)
          end do
          write (*, '(I6)') num
          count = count + 1
        end if
    
        call next_permutation(digits, n, has_next)
        if (.not. has_next) exit
      end do
    
      write (*, '(A, I5)') 'Total numbers found: ', count
    
    contains
    
      subroutine next_permutation(a, len, has_next)
        integer, intent(inout) :: a(len)
        integer, intent(in) :: len
        logical, intent(out) :: has_next
        integer :: i, j, temp
    
        has_next = .false.
    
        do i = len - 1, 1, -1
          if (a(i) < a(i + 1)) then
            j = len
            do while (a(j) <= a(i))
              j = j - 1
            end do
            temp = a(i)
            a(i) = a(j)
            a(j) = temp
            call reverse_segment(a, i + 1, len)
            has_next = .true.
            return
          end if
        end do
      end subroutine next_permutation
    
      subroutine reverse_segment(a, start_idx, end_idx)
        integer, intent(inout) :: a(:)
        integer, intent(in) :: start_idx, end_idx
        integer :: left, right, tmp
    
        left = start_idx
        right = end_idx
        do while (left < right)
          tmp = a(left)
          a(left) = a(right)
          a(right) = tmp
          left = left + 1
          right = right - 1
        end do
      end subroutine reverse_segment
    
    end program perm_div5
    Permütasyon kullanmadan ve uygun olmayan sayıların atlanarak kalanları bulup bir dosyada listeleyen Fortran programı:
    [​IMG]
    https://i.ibb.co/FZB3pTG/502455-Fortran.png

    Program:
    Kod:
    ! 502455 sayısındaki rakamların yerleri değiştirilerek 6 basamaklı 5 ile
    ! tam bölünebilen kaç doğal sayı yazılabilir?
    program siralama
    implicit none
    integer :: bir, sayi, on, yuz, bin, onbin, yuzbin, toplam=0
    
    open (unit = 1, file = "sayilar.txt")
    
    do sayi = 204555, 555420, 5
    
       bir = MOD(sayi, 10); on = MOD(sayi / 10, 10); yuz = MOD(sayi / 100, 10)
       bin = MOD(sayi / 1000, 10); onbin = MOD(sayi / 10**4, 10)
       yuzbin = sayi / 10**5
    
       if ((bir == 1).or.(bir == 3).or.(bir == 6).or.(bir == 7).or.(bir == 8).or.(bir == 9)) cycle
       if ((on == 1).or.(on == 3).or.(on == 6).or.(on == 7).or.(on == 8).or.(on == 9)) cycle
       if ((yuz == 1).or.(yuz == 3).or.(yuz == 6).or.(yuz == 7).or.(yuz == 8).or.(yuz == 9)) cycle
       if ((bin == 1).or.(bin == 3).or.(bin == 6).or.(bin == 7).or.(bin == 8).or.(bin == 9)) cycle
       if ((onbin == 1).or.(onbin == 3).or.(onbin == 6).or.(onbin == 7).or.(onbin == 8).or.(onbin == 9)) cycle
       if ((yuzbin == 1).or.(yuzbin == 3).or.(yuzbin == 6).or.(yuzbin == 7).or.(yuzbin == 8).or.(yuzbin == 9)) cycle
    
       if ((bir == 0).and.(on == 0)) cycle
       if ((bir == 0).and.(yuz == 0)) cycle
       if ((bir == 0).and.(bin == 0)) cycle
       if ((bir == 0).and.(onbin == 0)) cycle
       if ((on == 0).and.(yuz == 0)) cycle
       if ((on == 0).and.(bin == 0)) cycle
       if ((on == 0).and.(onbin == 0)) cycle
       if ((on == 0).and.(yuzbin == 0)) cycle
       if ((yuz == 0).and.(bin == 0)) cycle
       if ((yuz == 0).and.(onbin == 0)) cycle
       if ((yuz == 0).and.(yuzbin == 0)) cycle
       if ((bin == 0).and.(onbin == 0)) cycle
       if ((bin == 0).and.(yuzbin == 0)) cycle
       if ((onbin == 0).and.(yuzbin == 0)) cycle
    
       if ((on == 2).and.(yuz == 2)) cycle
       if ((on == 2).and.(bin == 2)) cycle
       if ((on == 2).and.(onbin == 2)) cycle
       if ((on == 2).and.(yuzbin == 2)) cycle
       if ((yuz == 2).and.(bin == 2)) cycle
       if ((yuz == 2).and.(onbin == 2)) cycle
       if ((yuz == 2).and.(yuzbin == 2)) cycle
       if ((bin == 2).and.(onbin == 2)) cycle
       if ((bin == 2).and.(yuzbin == 2)) cycle
       if ((onbin == 2).and.(yuzbin == 2)) cycle
    
       if ((on == 4).and.(yuz == 4)) cycle
       if ((on == 4).and.(bin == 4)) cycle
       if ((on == 4).and.(onbin == 4)) cycle
       if ((on == 4).and.(yuzbin == 4)) cycle
       if ((yuz == 4).and.(bin == 4)) cycle
       if ((yuz == 4).and.(onbin == 4)) cycle
       if ((yuz == 4).and.(yuzbin == 4)) cycle
       if ((bin == 4).and.(onbin == 4)) cycle
       if ((bin == 4).and.(yuzbin == 4)) cycle
       if ((onbin == 4).and.(yuzbin == 4)) cycle
    
       if ((bir == 5).and.(on == 5).and.(yuz == 5).and.(bin==5)) cycle
       if ((bir == 5).and.(on == 5).and.(yuz == 5).and.(onbin==5)) cycle
       if ((bir == 5).and.(on == 5).and.(yuz == 5).and.(yuzbin==5)) cycle
       if ((bir == 5).and.(on == 5).and.(bin == 5).and.(onbin==5)) cycle
       if ((bir == 5).and.(on == 5).and.(bin == 5).and.(yuzbin==5)) cycle
       if ((bir == 5).and.(on == 5).and.(onbin == 5).and.(yuzbin==5)) cycle
       if ((bir == 5).and.(yuz == 5).and.(bin == 5).and.(onbin==5)) cycle
       if ((bir == 5).and.(yuz == 5).and.(bin == 5).and.(yuzbin==5)) cycle
       if ((bir == 5).and.(yuz == 5).and.(onbin == 5).and.(yuzbin==5)) cycle
       if ((bir == 5).and.(bin == 5).and.(onbin == 5).and.(yuzbin==5)) cycle
       if ((on == 5).and.(yuz == 5).and.(bin == 5).and.(onbin==5)) cycle
       if ((on == 5).and.(yuz == 5).and.(bin == 5).and.(yuzbin==5)) cycle
       if ((on == 5).and.(yuz == 5).and.(onbin == 5).and.(yuzbin==5)) cycle
       if ((on == 5).and.(bin == 5).and.(onbin == 5).and.(yuzbin==5)) cycle
       if ((yuz == 5).and.(bin == 5).and.(onbin == 5).and.(yuzbin==5)) cycle
    
       toplam = toplam + 1; write(1, 10)toplam,"   ",sayi
    
    enddo
    
    print*, toplam," adet sayi olabilir. Sayilar.txt dosyasina bakiniz."
    
    close(1)
    
    10 format (i2,a,i6)
    
    end
    Not: Sayıların listesi ekteki dosyadadır

    Ekli Dosyalar:

Sayfayı Paylaş