Archive for the ‘Algorithms’ Category

C# Smith Number

Posted: January 14, 2016 in Algorithms, C#
Tags: ,

smith a

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int number, x, i = 2, sum = 0, sum1 = 0, y;
Console.WriteLine(“Enter number=”);
number = Convert.ToInt32(Console.ReadLine());
x = number;
while (number > 10)
{

sum = sum + number % 10;
number = number / 10;
}

sum = sum + number;
while (x > 1)
{
if ((x % i) == 0)
{
if (i == 2 || i == 3 || i == 5 || i == 7)
{
sum1 = sum1 + i;
x = x / i;
}
else
{
y = i;
while (y > 10)
{
sum1 = sum1 + y % 10;
y = y / 10;

}

sum1 = sum1 + y;
x = x / i;

}
}

else
i++;
}
if (sum == sum1)
Console.Write(“Smith number”);
else
Console.WriteLine(“Not smith number”);
Console.ReadLine();

}
}
}

 

smith numbers

 

 

 

 

 

Advertisements

Bir köprüyü geçmek için 4 insan vardır.İnsanların hepsi köprünün bir tarafındadır.Ve bir tek fenerleri vardır.Gece ve köprü dar olduğundan 2 kişi köprüden geçebilmektedir.Köprüden kim geçerse geçsin feneri 1 kişi taşıyacaktır.İnsanların her birinin hızı farklıdır.

x insanı köprüyü 1 dk
y insanı köprüyü 2 dk
z insanı köprüyü 5 dk
k insanı köprüyü 10 dk geçiyor.

Köprüyü geçen ikililerden hızı yüksek olan yavaş olana uymak zorundadır.

Bütün insanları karşı kıyıya geçirmek için gerekli olan minimum dk bulunuz?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ConsoleApplication18
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“insanların hızlarını kücükten büyüge dogru sıralayın”);
Console.WriteLine(“Lütfen en kücük hızı giriniz=”);
int x = int.Parse(Console.ReadLine());
Console.WriteLine(“Lütfen en kücük hızdan sonraki hız giriniz=”);
int y = int.Parse(Console.ReadLine());
Console.WriteLine(“Lütfen en büyük hızdan önceki hızı giriniz=”);
int z = int.Parse(Console.ReadLine());
Console.WriteLine(“Lütfen en büyük hızı giriniz=”);
int k = int.Parse(Console.ReadLine());
Console.WriteLine(“hız sıralaması: x<y<z<k olmalı!!!");

int sonuc = 0;

sonuc = y + x + k + y + y;

Console.WriteLine("minimum süre:" + sonuc);
Console.ReadLine();

}
}
}

8

Her biri farklı dedikodu bilen x sayıda insanın olduğunu düşünün.Bu insanlar ,telefonla haberleşerek bildikleri dedikoduları

birbirleriyle paylaşmaktadırlar.Herkesin tüm dedikoduları bilmesi için en az kaç telefon görüşmesi yapılmalıdır?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Enter the number of persons:”);
int x = int.Parse(Console.ReadLine());
int b=0;
if (x == 0)
{
b = 0;

}

else if (x == 2)
{
b = 1;

}

else if (x == 3)
{

b = 2;

}

else if(x>=4)

{

b=2*x-4;

}

Console.WriteLine(“phone call needs to be done = {0}”, b);
Console.ReadKey();

}
}
}

————————————————————————————-

34

P.Tannenbaum , kenarları a,b,c ve açıları 120 dereceden küçük olarak verilen bir üçgenin köşelerini birleştiren en kısa uzunluğu
aşağıdaki algoritmayla hesaplanacağını bulmuştur.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication17
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Lütfen a kenarını giriniz=”);
int x = int.Parse(Console.ReadLine());
Console.WriteLine(“Lütfen b kenarını giriniz=”);
int y = int.Parse(Console.ReadLine());
Console.WriteLine(“Lütfen c kenarını giriniz=”);
int z = int.Parse(Console.ReadLine());
double n = (x * x + y * y + z * z)/2;
double m = 2 * x * x * y * y + 2 * x * x * z * z + 2 * y * y * z * z – (x * x * x * x + y * y * y * y + z * z * z * z);
double k = Math.Sqrt(3)/2*Math.Sqrt(m);
double t = Math.Sqrt(n + k);

double deger = Math.Sqrt(t);
Console.WriteLine(“En kısa uzunluk = {0}”, deger);
Console.ReadKey();

}
}
}

—————————————————————————————————————————-

33

Euclid algorithm -> EBOB un belirlenmesi

EBOB (a,b)=ax+by;

Örnek EBOB ( 15,25) ü bulalım

25=15*1+10
15=10*1+5
10=5*2+0

EBOB = ( 15,25) =5

Aşağıdaki program kullanıcıdan iki sayı almaktadır ve yukarıda anlattığımız yöntemle EBOB u bulmaktadır.
#include
#include

int main()
{
int x,y,EBOB,r;

printf(“Enter the number1 and number2:”);
scanf(“%d %d”,&x,&y);
while(y!=0)
{

r=x;
x=y;
y=r%y;

}

EBOB =x;
printf(“iki sayinin EBOB’u::”);
printf(“%d”, EBOB);

}
——————————————————————————————————————–

32

Özyinelemeli yaklaşım olan bu örnek Fransız Matematikçi E.Luke tarafından bulunmuştur.

Örnekle açıklamak gerekirse A,B,C gibi dik konumda yerleştirilmiş 3 tane çubuk ve x sayıda disk vardır.

Başlangıç durumda diskler aşağıdaki gibidir.

29

Yani disklerin boyunu aşağıya doğru orantılı bir şekilde artmaktadır. Her seferinde yalnız bir diskin hareketine izin verildiğinde, büyük diski küçüğünün üzerine yerleştirmeden ,disklerin C çubuğuna taşınması isteniyor.

Bu yaklaşıma dayalı kod aşağıdadır.

#include
#include
#include

void hanoi(int n,char x,char y, char z)
{
if(n==1)

printf(“Diski %c cubugundan %c cubuguna koy.\n\n”,x,z);
else
{
hanoi (n-1,x,z,y);
hanoi (1,x,y,z);
hanoi (n-1,y,x,z);

}
}

int main()
{
int n;

printf(“Disk sayisi N:”);
scanf(“%d”,&n);
hanoi(n,’A’,’B’,’C’);

return 0;
}

——————————————————————————————————————-

Ekran çıktısı:

30

Minimum geçiş sayısı=
31

C Hamming number

Posted: October 12, 2014 in Algorithms, C
Tags: ,

Hamming sayıları 2,3,5 ten başka diğer asal bölenleri olmayan dizilere denir.

2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 ….

Aşağıdaki program girdiğimiz sayıya kadar olan hamming sayılarını bulmaktadır.

#include
#include
#include

int bayram(int x)
{
if(x==1) return 1;
if(x%2==0) return bayram(x/2);
if(x%3==0) return bayram(x/3);
if(x%5==0) return bayram(x/5);
return 0;

}

int hamming(int x)

{

if (x==1) return 1;
hamming(x-1);
if(bayram(x)) printf(” %d “,x);

}

int main()
{

hamming(20);

return 0;
}

—————————————————————————————————————————-

28