Açıklama: Bu oyunda bilgisayar hafızasında dört basamaklı ,rakam tekrarı olmayanbir sayı tutuyor ve sizden bunu bulmanız için tahmin yürütmenizi istiyor.Size ipucu olarak artı ve eksi iki değer veriyor.artı değerler tahmin ettiğiniz sayi ile bilgisayarın tuttuğu sayıda aynı basamakta tutan rakam sayısını ,eksi değerlerfarklı basamakta tutan rakam  sayısını ifade ediyor.Örneğin bilgisayarın tuttuğu sayı 4602 olsun.sizin tahmininiz 2601 ise bilgisayar size +2 -1 şeklinde bir ipucu verir.+2 ifadesi6 ve 0 rakamlarının  her iki sayıda da tuttuğunu ve aynı basamakta bulunduğunu, -1 ifades,2 rakamının tuttuğunu ancak farklı basamakta bulunduğunu anlatır. 0  0 ifadesi hiçbir rakamın tutmadığını ifade eder. Doğru sonucu bulabilmeniz için rakam tekrarı olmayan 4 basamaklı sayıları tahmin olarak girmeniz gerekiyor.

 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void sayiolustur(int []);
void diziyeata(int ,int []);
bool diziyikontrolet(int []);
void ikidiziyikontrol(int [],int [],int []);
void yazdir(int []);
bool sayiyikontrolet(int);
int main()
{
    int a[4],b[4],c,e[2];
    srand(time(NULL));
     sayiolustur(a);
     int i=0;
    do{
    if(i==15)
    {
    printf("Maalesef Kaybettiniz\n\n");
    printf("Tutulan sayi %d%d%d%d idi\n\n",a[0],a[1],a[2],a[3]);
    break;}
    printf("%d. adim  ",++i);
    printf("Tahmin giriniz:\n");
    scanf("%d",&c);
    if(!sayiyikontrolet(c))
    {i--;continue;}
    diziyeata(c,b);
    ikidiziyikontrol(a,b,e);
    yazdir(e);
    
    }while(*e!=4);
    if(i<15)
    printf("Puaniniz=%d\n",100-(i-1)*3);
    system("pause");
    return 0; 
}
void diziyeata(int a,int b[])
{
     int c=1000,i;
     for(i=3;i>=0;i--)
     {b[3-i]=a/c%10;c/=10;}
}
void sayiolustur(int a[])
{
    int i;
    
    i=rand()%9000+1000;
    diziyeata(i,a);
    while(!diziyikontrolet(a))
    {
     i=rand()%9000+1000;
    diziyeata(i,a);
    }
   
}
bool diziyikontrolet(int a[])
{   int i,j;
    for(i=0;i<4;i++)
    for(j=i+1;j<4;j++)
    if(a[i]==a[j])
    return false;
    
    return true;
}
void ikidiziyikontrol(int a[],int b[],int d[])
{
    int artilar=0,eksiler=0;
    int i,j;
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    if(a[i]==b[j]&&i==j)
    ++artilar;
    else if(a[i]==b[j]&&i!=j)
    --eksiler;
    
    d[0]=artilar;
    d[1]=eksiler;
}
void yazdir(int x[])
{
     if(*x!=4)
     printf("%+d  %d\n\n",*x,*(x+1));
     else
     printf("Tebrikler kazandiniz\n\n");
}
bool sayiyikontrolet(int i)
{
     int a[4];
     diziyeata(i,a);
     if(i<0)
     {
     printf("Tahmininiz pozitif olmali\n\n");
     return false;
     }
     else if(!(i>999&&i<10000)) 
     {
     printf("Tahmininiz dort basamakli olmali\n\n");
     return false;
     }
     else if(!diziyikontrolet(a))
     {
     printf("Tahmininizde rakam tekrari olmamali\n\n");
     return false;
     }
     return true;
}

 

 Bu örnek kullanıcılarımız tarafından gönderilmiştir.

 

Yorum yapın