Collatz Prooblemi

jack_63

Öğrenci
Katılım
14 Kasım 2016
Mesajlar
1
Reaksiyon puanı
0
Puanları
1
Yaş
35
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
 

arsenik

Rektör
Katılım
8 Ağustos 2009
Mesajlar
11,349
Reaksiyon puanı
242
Puanları
243
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.

Kod:
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 . . .
 
Üst