Algoritma Canavarları 5

+3 oy
24 Nisan 2015 mstfergl Uzman Yardımcısı (4,710 puan)   sordu

Algoritma Canavarları yarışmamızın 5. sorusu ile karşınızdayız. Geçen haftalara göre daha kolay bir soru sorduk. Bu sebepten ödül 5000 puan. Yarışma hakkında detaylı bilgi için buraya tıklayınız. Yarışma süresi 48 saattir. Pazar günü 24.00'da yarışma sonlandırılacaktır. Bu süre içerisinde yazılan ilk doğru cevap puan ödülünü almaya hak kazanır.

Soru

100 Adam ve 100 kapımız var. 1. adam 1’in katları olan kapılardan, 2. adam 2’nin katları olan kapılardan, ...., N. Adam N’in katları olan kapılardan, ... , 100. Adam 100’ün katları olan kapılardan geçerek kapıların konumlarını değiştiriyor. (Kapı açıksa kapatıyor, kapalıysa açıyor). En başta tek sayıdaki kapıların açık ve çift sayıdaki kapıların kapalı olduğunu kabul edersek, 100. adam da geçtikten sonra hangi kapıların kapalı olduğunu bulan programı yazınız.

9 Cevap

+1 oy
25 Nisan 2015 basillus Uzman (6,060 puan)   cevapladı
26 Nisan 2015 mstfergl seçti
 
En İyi Cevap

http://pastebin.com/YiWkfdGz
Doğru çalışmaktadır.

  1. #include <iostream>

  2.  

  3. bool kapilar[100];

  4.  

  5. using namespace std;

  6. int main(int argc, char** argv) {

  7.         for(int i=1; i<=100; i++){

  8.                 if(% 2 == 0){

  9.                         kapilar[i] = false;

  10.                 }else{

  11.                         kapilar[i] = true;

  12.                 }      

  13.         }

  14.         for(int a=1; a<=100; a++){

  15.                 for(int b=a; b<=100; b+=a){

  16.                         kapilar[b] = !kapilar[b];

  17.                 }

  18.         }

  19.         for(int i=1; i<=100; i++){

  20.                 cout << "[" << i << "] : " << kapilar[i] << "\t";

  21.         }

  22.         return 0;

  23. }

 

 

0 oy
25 Nisan 2015 Salih Can ÖZEL Kıdemli Uzman (13,670 puan)   cevapladı
25 Nisan 2015 Salih Can ÖZEL düzenledi
Bu algoritmayı Ruby ile programladım. Gist olarak paylaşıyorum.

https://gist.github.com/slhcnzl/d38e8c2e715bd9783c16

Burdan da online compiler ile çalıştırabilirsiniz.

http://repl.it/klu/1
25 Nisan 2015 Salih Can ÖZEL Kıdemli Uzman (13,670 puan)   yorumladı
Haklısın Hakan, soruyu hızlıca okuyup sorunun bizden sadece kapalı kapıların sayısını istediğini sandığım için başta yazmış olduğum satırı sildim bunu da zaten  gereksiz "each_with_index" kullanmışım gibi görünmesinden anlayabilirsin. :)
0 oy
25 Nisan 2015 mkocaker06 Uzman Yardımcısı (3,890 puan)   cevapladı
kodlar burda python ile yazılmıştır. Program çıktısı sadece kapalı kapıları gösteriyor.

liste1 = []
for i in range(1, 101):
    if i%2==0: liste1.append("Kapalı")
    else: liste1.append("Açık")

for sayi in range(1,101):
    for i in range(len(liste1)):
        indeks = (sayi*i) - 1
        if indeks >= 101:
            break
        if liste1[indeks]=="Açık":
            liste1[indeks]="Kapalı"
        else:
            liste1[indeks]="Açık"

for i in range(len(liste1)):

    if liste1[i]=="Kapalı" :
        print(i+1,end=" ")
    else:
        continue      
#print(liste1)
0 oy
25 Nisan 2015 ismira Stajyer (540 puan)   cevapladı

Dostum Cevabı Yanlıslıkla adamın Yorumuna Yazmısım S

GitHub Linki

https://github.com/DismiraK/kapilar/commit/2d5ef0a96275945ac06f53133791003a65e821a7

25 Nisan 2015 mstfergl Uzman Yardımcısı (4,710 puan)   yorumladı
Sorun değil. Biz cevabınızı yorumunuzun paylaşılma zamanına göre değerlendireceğiz. Yorumunuzu silmeyiniz.
0 oy
25 Nisan 2015 vectoral Stajyer (620 puan)   cevapladı

public class Kapi {

boolean kapi[]=new boolean[100];

private int cnt;

 

public Kapi() {

// TODO Auto-generated constructor stub

git();

}

 

private void git() {

// TODO Auto-generated method stub

for(int i=0;i<100;i++) {

if(i%2==0) kapi[i]=false;

else kapi[i]=true;

 

}

for(int j=0;j<100;j++){

for(int i=1;i<j;i++){

if((j%i)==0){

if(kapi[i])kapi[i]=false;

if(!kapi[i])kapi[i]=true;

 

}

 

}

}

 

for(int i=0;i<100;++i)if(!kapi[i]){

cnt++;

System.out.println(kapi[i]);

}

 

System.out.println(cnt+" tanesi kapalı ");

 

 

}

 

public static void main(String[] args) {

// TODO Auto-generated method stub

new Kapi();

}

 

}

0 oy
25 Nisan 2015 fatihkarabasoglu Stajyer (540 puan)   cevapladı

c# dili ile.................... 

string[] kapilar=new string[101];
            kapilar[0] = null;
            for (int i = 1; i < kapilar.Length; i++)
            {
                if (i%2==0)
                {
                    kapilar[i] = "k";
                }
                else
                {
                    kapilar[i]="a";
                }
                Console.WriteLine((i)+".kapi "+kapilar[i]);
            }

            for (int i = 1; i < kapilar.Length; i++)
            {
                for (int j = 1; j < kapilar.Length; j++)
                {
                    

                        if (j % i==0)
                        {
                            if (kapilar[j]=="a")
                            {
                                kapilar[j] = "k";
                            }
                            else if (kapilar[j] == "k")
                            {
                                kapilar[j] = "a"; 
                            }
                        }
                    
                   
                  
                  
                }
                
            } 
            int say = 0;
            for (int i = 1; i < kapilar.Length; i++)
            {
                if (kapilar[i]=="k")

                {
                    Console.Write((i)+" ");
                    say++;
                }
            }
            Console.Write("\n"+say+" adet kapı kapali");
            Console.ReadKey();

0 oy
25 Nisan 2015 Sinan Kocaoğlu Stajyer (540 puan)   cevapladı
C Koduyla

#include<windows.h>
#include<stdio.h>
main()
{
    int a[100],i,x,j,y,k,t;
    for(i=0;i<101;i++){
        x=i%2;
        if(x==0){
            a[i]=0;
        }
        else if (x==1){
            a[i]=1;    
        }
    }
      for(j=1;j<101;j++){
          for(k=1;k<101;k++){
              y=k%j;
              if(y==0 && a[k]==0){
                  a[k]=1;    
              }
          else if (y==0 && a[k]==1) {
              
              a[k]=0;
          }
          }
      }
          for(t=1;t<101;t++)
          printf("%d. kapi=%d\n",t,a[t]);
}
0 oy
25 Nisan 2015 scknkkrer Stajyer (580 puan)   cevapladı
Dil: Clojure
Süre: 5:55 dakika.
IDE: Intj
KOD:

(println (filter number?
           (let [ mafn (fn [adam d] (map-indexed #(if(zero? (mod (inc %) adam)) (not %2) %2) d))
                  magrl (fn [d] (map-indexed #(if %2 (inc %) ) d))
                  madata (apply vector (take 100 (cycle '( true false ))))]
                (magrl (loop [mdata madata i 1] (if (> i 100) mdata
                                      (recur (mafn i mdata) (inc i))
                                      )))
           )))

ÇIKTI:
(3 4 5 7 11 13 15 16 17 19 21 23 27 29 31 33 35 36 37 39 41 43 45 47 51 53 55 57 59 61 63 64 65 67 69 71 73 75 77 79 83 85 87 89 91 93 95 97 99 100)
0 oy
26 Nisan 2015 kagancetin Stajyer (720 puan)   cevapladı
public class Main {

    public static void main(String[] args) {
        String [] Doors = new  String[100];
        int Door ;


        for(int i = 0 ; i <Doors.length; i= i+2 )
        {
            Doors[i] ="Open";
            Doors[i+1] ="Closed";
        }



        for(int i = 1; i < 101;i++ )
        {
            for ( int k = 1 ; i*k < 101 ; k++)
            {
                if( i == 1 )
                {
                    Door = k-1;
                }else
                {
                    Door = (i * k )-1;
                }

                if(Doors[Door].equals("Closed") )
                {
                    Doors[Door] = "Open";
                }else if (Doors[Door].equals("Open") )
                {
                    Doors[Door] = "Closed";
                }

            }
        }

        for (int i = 0 ; i<Doors.length;i++)
        {
            if(Doors[i].equals("Closed") )
            {
                System.out.println((i+1)+". Door is "+Doors[i]);
            }
        }

    }

}
...