Algoritma Canavarları 2

+14 oy
3 Nisan 2015 mstfergl Uzman Yardımcısı (4,710 puan)   sordu
10 Nisan 2015 Tahsin Dalman düzenledi

Arkadaşlar merhaba, algoritma canavarları kategorisinde 2. sorumuzu paylaşıyoruz. Algoritma canavarları kategorisindeki yarışma hakkında detaylı bilgi buradadır.

Sorumuz : 

980 m derinliğinde bir kömür kuyusu var. Bir kepçe bu kuyuya her dalışında 2586 kg kömür çıkartıyor ve kuyu 5 m derinleşiyor. Çıkartırken her 40 m' de bir 58 kg döküyor. Çıkartılan kömür 1000 ton' a ulaştığında son derinlik ne olur ve kepçe toplam kaç hareket yapmış olur?

Ödül : Herhangi bir programlama dilinde doğru kodlanmış ilk cevabın sahibi 2500 puan kazanacak.

13 Cevap

–4 oy
4 Nisan 2015 Salih Can ÖZEL Kıdemli Uzman (13,670 puan)   cevapladı
5 Nisan 2015 Tahsin Dalman seçti
 
En İyi Cevap
Yazılan kodlara bakınca, çok fazla derinlikler çıktığını gördüm. Derinlik 1820 m ye ulaştığında, her 40 m de 58 kg kömür döküldüğünü göz önüne alırsak (1820/40) * 58 = 2610 eder ki buda yukarı çıkana kadar elimizde hiç kömür kalmayacağı anlamına gelir. Bence dışarı çıkarılan kömür miktarı hiçbir zaman 1000 tonu bulmaz.

Kodu gist olarak paylaşıyorum(ruby) : https://gist.github.com/slhcnzl/9987b39419d5e9799ed1
+4 oy
3 Nisan 2015 kagancetin Stajyer (720 puan)   cevapladı
5 Nisan 2015 kagancetin düzenledi
int çıkarılanKömür = 0,dışarıdakiKömür=0,kuyununDerinliği = 980,kepçeninGirmeSayısı = 0;

while(dışarıdakiKömür < 1000000 && çıkarılanKömür >= 0)

{
    kepçeninGirmeSayısı++;
    kuyununDerinliği = kuyununDerinliği + 5 ;
    çıkarılanKömür = 2586 - ((kuyununDerinliği/40)*58);
    dışarıdakiKömür= dışarıdakiKömür + çıkarılanKömür;


}

System.out.println("Kepçenin Girme Sayısı: "+kepçeninGirmeSayısı+" Kuyunun Derinliği:  "+kuyununDerinliği);
5 Nisan 2015 kagancetin Stajyer (720 puan)   yorumladı
Bir süre sonra kömür çıkarılamayacağını hesaba katmak lazım :D
+3 oy
3 Nisan 2015 brncoguz Stajyer (640 puan)   cevapladı
4 Nisan 2015 brncoguz düzenledi
//C

#include <stdio.h>

int main()
{
    int toplam_komur = 0, derinlik = 980, toplam_hareket = 0, cikartilacak_komur;

    while (toplam_komur <= 1000000)
    {
        toplam_hareket++;
        derinlik += 5;
        cikartilacak_komur = 2586 - (derinlik * 58) / 40;
        if (cikartilacak_komur <= 0)
        {
            printf("Derinlik Cok Fazla, Daha Fazla Komur Cikartilamaz!!\n\n\a");
            break;
        }
        toplam_komur += cikartilacak_komur;
    }
    printf("Toplam %d adimda %d kg komur cikartildi.\n", toplam_hareket, toplam_komur);
    return 0;
}
3 Nisan 2015 eskiya Stajyer (500 puan)   yorumladı
//C# Console

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

namespace CikarilanKomur
{
    class Program
    {
        static void Main(string[] args)
        {
            int ulasilacakKomurMiktari = 1000000;
            int kuyuIlkDerinlik = 980;
            int dokulenKomurMiktari = 58;
            int derinlesenKuyuMiktari = 5;
            int yapilanHareketSayisi = 0;
            int cikarilanKomurMiktari = 0;
            int dokulecekZaman = 8;
            int dokulmeCount = 0;
            int ilkCikarilanKomurMiktari = 0;
            //cikarilanKomurMiktari = ilkCikarilanKomurMiktari;
            do
            {
                
                cikarilanKomurMiktari += 2586;
                yapilanHareketSayisi++;
                kuyuIlkDerinlik = kuyuIlkDerinlik + 5;
                dokulmeCount++;
                if (dokulmeCount==dokulecekZaman)
                {
                    cikarilanKomurMiktari = cikarilanKomurMiktari - dokulenKomurMiktari;
                    dokulmeCount = 0;
                }
                
            } while (cikarilanKomurMiktari<ulasilacakKomurMiktari);
            Console.WriteLine("Hareket sayısı : " + yapilanHareketSayisi);
            Console.WriteLine("Son derinlik : " + kuyuIlkDerinlik);
            Console.ReadLine();
        }
    }
}
0 oy
4 Nisan 2015 salihsamet Stajyer (660 puan)   cevapladı
//JAVA
    {
        int kuyu = 980;
        int komur=0,sayac=0,hareket=0;
        while(komur<=1000000) {
            kuyu+=5;
            hareket++;
            komur+=2586-(kuyu/40)*58;
        }
        System.out.println("Son derinlik = "+ kuyu);
        System.out.println("Hareket sayisi = "+ hareket);
    }
0 oy
4 Nisan 2015 tecnolog Stajyer (890 puan)   cevapladı
//SmallBasic//

 

cikarilan_k = 0

derinlik = 980

hareket = 0

while(cikarilan_k<=1000000)

hareket=hareket+1

cikarilan_k=cikarilan_k+(2586-(derinlik/40)*58)

derinlik=derinlik+5

EndWhile

TextWindow.WriteLine("derinlik= "+derinlik)

TextWindow.WriteLine("hareket= "+hareket)
0 oy
4 Nisan 2015 modega Stajyer (640 puan)   cevapladı

C# Console


static void Main(string[] args)
        {
            const int hedefKomur = 1000000;
            int alinanKomur = 2586;
            int cikarilanKomur = 0;
            int kuyuDerinligi = 980;
            int kepceHareketi = 0;

            do
            {
                kuyuDerinligi += 5;
                kepceHareketi++;
                cikarilanKomur += alinanKomur - ((kuyuDerinligi / 40) * 58);
            } while (cikarilanKomur < hedefKomur);
            Console.WriteLine("Kuyu Derinliği = {0}", kuyuDerinligi);
            Console.WriteLine("Kepçe Hareketi = {0}", kepceHareketi);
            Console.ReadLine();
        }

0 oy
4 Nisan 2015 Ferhat Stajyer (550 puan)   cevapladı
double sayac = 0, cikarilan = 0, derinlik = 980;

            while (cikarilan < 1000000)
            {
                cikarilan = cikarilan + (2586 - ((980 / 40) * 58));
                derinlik = derinlik + 5;
                sayac++;
            }
            Console.WriteLine( "Çıkarılan kömür(kg): " + cikarilan + "\nSon derinlik(m): " + derinlik + "\nDalış sayısı: " + sayac + "\n");

***Dökülen kömür derinliği etkileyecek mi ? yoksa dalış sonucunda net derinleşme mi 5 metre ?
0 oy
4 Nisan 2015 yilmazbisirici Stajyer (540 puan)   cevapladı
// bu işlem tamamlanamiyor yani 1000 ton komuru hic bir zaman bu sartlarda toplayamaz

 

 

int derinlik = 980; // inilen son derinlik

int cikarilan = 0; // Toplam Cıkarılan Komur Miktarı

int hs = 0; //Hareket Sayısı

int dokulen = 0; // her 40 metrede dokulen miktar

while (cikarilan <= 1000000)

{

checked

{

hs += 1;

cikarilan += 2589;

derinlik += 5;

dokulen = (derinlik / 40 ) * 58 ;

if (dokulen > 2589)

{

dokulen = 2589;

MessageBox.Show("Bu Asamadan sonra cikarilan dokulecek 1000 ton bu saatten sonra cikarilamaz :)");

return;

}

cikarilan -= dokulen;

}

listBox2.Items.Add("HareketSayısı:" + hs.ToString() + "Derinlik:"+derinlik.ToString()+"Cıkarılan:" + cikarilan.ToString());
0 oy
4 Nisan 2015 Burak Alkan Stajyer (540 puan)   cevapladı

import java.math.BigDecimal;

 

 

public class Komur {

int kez;

BigDecimal x=new BigDecimal(0);

public Komur() {

// TODO Auto-generated constructor stub

cikar();

}

 

private void cikar() {

// TODO Auto-generated method stub

while(true){

 

kez++;

x=new BigDecimal(980-5*kez);

if((5*kez)%40==0)x.add(new BigDecimal((5./2586.)*58.));

if( Double.valueOf( (x.add(new BigDecimal(-1000*(5./2586.))).toString()))<(0.1))break;

 

 

}

System.out.println("KEZ "+" DERİNLİK ");

System.out.println(kez+" "+x.toString());

}

 

public static void main(String[] args) {

// TODO Auto-generated method stub

new Komur();

}

 

}

0 oy
4 Nisan 2015 vectoral Stajyer (620 puan)   cevapladı

import java.math.BigDecimal;

 

public class Komur {

 

int kez;

double cikan;

double x;//=new BigDecimal(0.);

 

public Komur() {

 

// TODO Auto-generated constructor stub

 

cikar();

 

}

 

 

 

private void cikar() {

 

// TODO Auto-generated method stub

 

while(true){

 

 

 

kez++;

 

x= 980.+5*kez;

cikan=2586.*kez;

if(kez%8==0)

{

x=x-(5./2586.)*58.;

 

cikan=cikan-58.;

 

 

 

}

if(Math.round(cikan)>=1000000)break;

}

 

System.out.println("KEZ "+" DERİNLİK ");

 

System.out.println(kez+" "+x);

 

}

 

 

 

public static void main(String[] args) {

 

// TODO Auto-generated method stub

 

new Komur();

 

}

 

 

 

}

 

 

 

 

//----------------------------------------------------------------------------------------------

// KEZ     DERİNLİK

//  387    2915.0

 

// 387 defada 2915 metre derinlik elde edilir.

...