İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

Collatz Prooblemi

jack_6314.11.20161 cevap749 görüntüleme
2016'den beri1 mesaj
#1
C Programlamada İki Sayı Gireceğiz Bu İki Arasındaki Sayıyı Ve Bu İki Sayı Dahil Olmak Üzere Program Sayı Tek İse 3n+1 Sayı Çift İse 2n Yaparak 1 Değerine Ulaşacak Bu Sayılardan En Uzun Adımda 1 Sayısına Ulaşan Değer Ekrana Yazılacak

Örnek girdi

1 10

Örnek Çıktı

1 10 9 (20)

9, 28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1

Yani 9 Sayısı 20 Adımda Tamamladığı İçin En Uzun Adım Olacak
Yardımcı Olursanız Sevinirim
Cevaplar
2009'den beri11 bin mesaj
#2
Sadece en uzun olanı değil de hepsini ekrana yazdırdım.

C# üstünde alttaki mantık ile yer alıyor. C'ye uyarlayabilirsiniz.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Collatz
{
    class Program
    {
        static void Main(string[] args)
        {
            int ilksayi = Convert.ToInt32(Console.ReadLine());
            int ikincisayi = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("---------------");
            for (int i = ilksayi; i <= ikincisayi; i++)
            {


                int sayi = i;
                Console.WriteLine($"{i} için");
                Program p = new Program();
                int sonuc = 0;
                int sayac = 0;
                while (sonuc != 1)
                {

                    sonuc = p.Hesapla(sayi);
                    Console.WriteLine(sonuc);
                    sayi = sonuc;
                    sayac++;
                }
                Console.WriteLine($"Devir sayısı {sayac + 1}");
                Console.WriteLine("---------------");
            }
        }


        public int Hesapla(int sayi1)
        {
            if (sayi1 % 2 == 0)
            {
                return sayi1 / 2;
            }
            else
            {
                return (3 * sayi1) + 1;
            }
        }
    }
}


1 ve 10 veriyorum. Çıktıyı alttaki gibi alıyorum.

1
10
---------------
1 için
4
2
1
Devir sayısı 4
---------------
2 için
1
Devir sayısı 2
---------------
3 için
10
5
16
8
4
2
1
Devir sayısı 8
---------------
4 için
2
1
Devir sayısı 3
---------------
5 için
16
8
4
2
1
Devir sayısı 6
---------------
6 için
3
10
5
16
8
4
2
1
Devir sayısı 9
---------------
7 için
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Devir sayısı 17
---------------
8 için
4
2
1
Devir sayısı 4
---------------
9 için
28
14
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Devir sayısı 20
---------------
10 için
5
16
8
4
2
1
Devir sayısı 7
---------------
Press any key to continue . . .

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.