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
A
2009'den beri11 bin mesaj
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 . . .