Kaprekar Sayısı Nedir?

Hint matematikçisi D.R. Kaprekar tarafından 1949 yılında keşfedilen 6174 sayısı, bu matematikçinin şerefine Kaprekar sayısı olarak adlandırılmaktadır. Kaprekar sayısının elde edilmesi aşağıdaki şekildedir.

  • Farklı (veya hepsi tekrarlanmayan) rakamlardan oluşan dört basamaklı sayı alınır (örneğin 1746)
  • Bu sayının rakamlarından oluşan en büyük ve en küçük sayılar elde edilir. (7641 ve 1467)
  • Büyük sayıdan küçük sayı çıkarılır ve bu işlem en fazla 7 defa tekrarlanarak sonuçta her zaman 6174 sayısı elde edilir.
  • 7641 – 1467 = 6174
  • Şimdi rastgele seçtiğimiz sayılarla bu işlemleri yapalım…

 

Örnek 1 : 5644 sayısı

Adım 1: 6544 – 4456 = 2088

Adım 2: 8820 – 0288 = 8532

Adım 3 : 8532 – 2358 = 6174

 

Örnek 2 : 7652 sayısı

Adım 1 : 7652 – 2567 = 5085

Adım 2 : 8550 – 0558 = 7992

Adım 3 : 9972 – 2799 = 7173

Adım 4 : 7731 – 1377 = 6354

Adım 5 : 6543 – 3456 = 3087

Adım 6 : 8730 – 0378 = 8352

Adım 7 : 8532 – 2358 = 6174

Aşağıda kendi yazmış olduğum kaprekar sayı işlemlerini yapan programın kaynak kodları (C++) bulunuyor. Siz de kodları herhangi bir C++ derleyicisi kullanarak çalıştırıp deneyebilirsiniz.

#include<iostream>
using namespace std;
void BuyukBulma(int []); //Fonksiyon prototipi

int main(){

int dizi[4],buyukSayi,kucukSayi,sonuc,sayi; //gerekli degiskenlerin tanimlanmasi

for(int i=0;i<1;i++){
cout<<“Dort basamakli bir sayi giriniz (Elemanlarindan en az bir tanesi farkli olacaktir.):”; //kullanicidan sayi alinmasi
cin>>sayi;
if(sayi>9999 || sayi<1000 || sayi==1111 || sayi==2222 || sayi==3333 || sayi==4444 || sayi==5555 || sayi==6666 || sayi==7777 || sayi==8888 || sayi==9999){
i=-1; //ayni elemanlardan olusan sayilarin kaprekar sabiti olmadigi icin islem tekrarlaniyor.
}

}
for(int i=0;i<4;i++){ //sayinin en buyuk ve en kucugunu olusturmak icin diziye aktarilmasi
dizi[i]=sayi%10;
sayi/=10;
}

for(int i=0;i<7;i++){ //maksimim 7 adimda kaprekar sabitine ulasmak icin gerekli olan dongu
BuyukBulma(dizi); //girilen elemanlari buyukten kucuge siralamak icin fonksiyon cagirilir

buyukSayi=((dizi[0]*1000)+(dizi[1]*100)+(dizi[2]*10)+(dizi[3]*1)); //elemanlar basamak sistemiyle 4 basamakli sayi haline donusur
kucukSayi=((dizi[3]*1000)+(dizi[2]*100)+(dizi[1]*10)+(dizi[0]*1)); //kucuk sayi ise tam tersi seklinde olacagi icin islemin tersi yapilir

sonuc=buyukSayi-kucukSayi;
cout<<buyukSayi<<“-“<<kucukSayi<<“=”<<sonuc<<“\n”;

if(sonuc==6174){ //sonuc kaprekar sabitine esitse donguden cikiyor
i=7;
}
if(sonuc<1000){
cout<<“Sonuc 3 basamakli oldugu icin islem devam edemez.”;
i=7;
}
if(sonuc!=6174){ //sonuc kaprekar sabitine esit degilse olusan sayinin basamaklari tekrar diziye gonderilip islemler tekrarlaniyor
dizi[0]=sonuc%10;
sonuc/=10;
dizi[1]=sonuc%10;
sonuc/=10;
dizi[2]=sonuc%10;
sonuc/=10;
dizi[3]=sonuc%10;
sonuc/=10;
}

}
return 0;
}

void BuyukBulma(int x[]){ //dizi elemanlarini buyukten kucuge siralamak icin fonksiyon

int maksimum;
int temp;

for(int i=0;i<3;i++){ //kacinci buyuk eleman araniyor diye gerekli dongu
maksimum=i;
for(int j=i+1;j<4;j++){ //elemanlar arasinda karsilastirma yapmak icin gerekli dongu
if(x[j]>x[maksimum])
maksimum=j; //eleman buyukse degismiyor
}
if(i!=maksimum){ //eleman buyuk degilse yer degistirme islemi yapiliyor
temp=x[i];
x[i]=x[maksimum];
x[maksimum]=temp;
}
}

}

PROGRAMDAN ÇIKTI GÖRÜNTÜSÜ

(Visited 10 times, 3 visits today)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir