Bilgisayar Mühendisliği 1. sınıfa giderken c++ ile böyle bir ödev verilmişti ve kişisel bloğum üzerinde paylaşmıştım. Tekrar burada sizlerle de paylaşmak istedim.
Kaprekar sayı, Dattathreya Ramachandra Kaprekar tarafından bulunan bir sayı. Mantığı ise şu şekilde; 4 basamaklı ve rakamları farklı bir sayı seçiyorsunuz. Bu sayısı büyükten küçüğe ve küçükten büyüğe sıralayıp farkını alın. Çıkan sonucu da aynı şekilde büyükten küçüğe ve küçükten büyüğe sıralayıp tekrar farkını alın. Bu şekilde bir kaç adım devam edince sonucun sürekli 6174 olduğunu göreceksiniz.
Örnek;
7210 – 0127 = 7083
8730 – 0378 = 8352
8532 – 2358 = 6174
7641 – 1467 = 6174.
Kaprekar sayı mantığını anladıktan sonra, kaprekar sayının c++ programın geçelim.
/*Kodlayan: Emirhan Bülbül
Web site: www.emirhanbulbul.com
C++ Programlama Örnekleri
C++ İle Kaprekar Sayı Bulma Programı
*/
#include <iostream>
#include <conio.h>
using namespace std;
int main(int argc, char** argv) {
int toplamb=0,toplamk=0,sonuc;
int matris[]={1,2,3,4};
int buyukmatris[]={1,2,3,4};
int kucukmatris[]={1,2,3,4};
cout<<"4 basamakli bir sayi girin: (Her rakamdan sonra enter'a basin:')\n";
for(int a=0;a<4;a++){
cin>>matris[a];
}
//Buyukten kucuge
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(matris[i]>matris[j]){
int temp=matris[i];
matris[i]=matris[j];
matris[j]=temp;
}
}
}
for(int c=0;c<4;c++){
buyukmatris=matris;
}
//Kucukten buyuge
for(int r=0;r<4;r++){
for(int g=0;g<4;g++){
if(matris[r]<matris[g]){
int temp=matris[r];
matris[r]=matris[g];
matris[g]=temp;
}
}
}
for(int c=0;c<4;c++){
kucukmatris=matris;
}
for(int b=0;b<4;b++){
// Tek tek girilen rakamları tek bir sayı haline getiriyor.
if(b==0){
toplamb=(toplamb+(buyukmatris[b]*1000));
}
if(b==1){
toplamb=(toplamb+(buyukmatris[b]*100));
}
if(b==2){
toplamb=(toplamb+(buyukmatris[b]*10));
}
if(b==3){
toplamb=(toplamb+(buyukmatris[b]*1));
}
}
for(int t=0;t<4;t++){
// Tek tek girilen rakamları tek bir sayı haline getiriyor.
if(t==0){
toplamk=(toplamk+(kucukmatris[t]*1000));
}
if(t==1){
toplamk=(toplamk+(kucukmatris[t]*100));
}
if(t==2){
toplamk=(toplamk+(kucukmatris[t]*10));
}
if(t==3){
toplamk=(toplamk+(kucukmatris[t]*1));
}
}
sonuc=(toplamb-toplamk); //büyük sayıdan küçük sayı çıkıyor
cout<<toplamb<<"-"<<toplamk<<"="<<sonuc<<endl;
int sayac=1; // 7 seferde tamamlanması için sayaç.
burasi: //goto etiketi
if(sonuc!=6174){ //6174'e eşit değilse döndür.
sayac++;
if(sayac>7){
cout<<"Kaprekar sayi degil.";
return 0;
}
// girilen rakamları tek bir sayı yapmıştık şimdi tekrar parçalıyoruz.
matris[0]=sonuc/1000;
matris[1]=(sonuc/100)%10;
matris[2]=(sonuc/10)%10;
matris[3]=sonuc%10;
int toplamb=0,toplamk=0; //değerleri sıfırlıyoruz.
//Buyukten kucuge
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(matris[i]>matris[j]){
int temp=matris[i];
matris[i]=matris[j];
matris[j]=temp;
}
}
}
for(int c=0;c<4;c++){
buyukmatris=matris;
}
//Kucukten buyuge
for(int r=0;r<4;r++){
for(int g=0;g<4;g++){
if(matris[r]<matris[g]){
int temp=matris[r];
matris[r]=matris[g];
matris[g]=temp;
}
}
}
for(int c=0;c<4;c++){
kucukmatris=matris;
}
for(int b=0;b<4;b++){
if(b==0){
toplamb=(toplamb+(buyukmatris[b]*1000));
}
if(b==1){
toplamb=(toplamb+(buyukmatris[b]*100));
}
if(b==2){
toplamb=(toplamb+(buyukmatris[b]*10));
}
if(b==3){
toplamb=(toplamb+(buyukmatris[b]*1));
}
}
for(int t=0;t<4;t++){
if(t==0){
toplamk=(toplamk+(kucukmatris[t]*1000));
}
if(t==1){
toplamk=(toplamk+(kucukmatris[t]*100));
}
if(t==2){
toplamk=(toplamk+(kucukmatris[t]*10));
}
if(t==3){
toplamk=(toplamk+(kucukmatris[t]*1));
}
}
sonuc=(toplamb-toplamk);
cout<<toplamb<<"-"<<toplamk<<"="<<sonuc<<endl;
goto burasi;
}
return 0;
}