Algoritma Canavarları 6

+1 oy
1 Mayıs 2015 mstfergl Uzman Yardımcısı (4,700 puan)   sordu

 Algoritma Canavarları yarışmamızın 6. sorusu ile karşınızdayız. Bu haftaki ö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

Bir yapı inşa etmek istiyoruz. Tabanında kare biçiminde yerleştirilmiş N*N adet, ikinci katında (N-1)*(N-1), üçüncü katında (N-2)*(N-2), ... , N. katında (son kat) 1 taş blok olduğu kabul edilsin. Bununla ilgili iki fonksiyon yazılması gerekiyor.

  1. Dışarıdan N (kat sayısı) girildiğinde bu inşanın kaç taş bloktan oluştuğunu

  2. İşçilerin günde 8 saat çalıştıklarını ve bir saatte ortalama 3 blok yerleştirdiklerini düşünürsek bu inşanın toplamda ne kadar sürede (gün ve saat olarak) biteceğini 

Örnek: N=5 değeri için çıktı aşağıdaki şekilde olacaktır.
             Toplam blok sayısı: 55
             Toplam süre: 2 gün 2 saat

bulan programı yazınız. Programlama dili ayırt etmiyoruz. İstediğiniz dili kullanabilirsiniz.

7 Cevap

+1 oy
2 Mayıs 2015 floody Uzman (5,860 puan)   cevapladı
3 Mayıs 2015 Tahsin Dalman seçti
 
En İyi Cevap
using namespace std;
#include <iostream>

int calculateBlocks(int n)
{
    if(n == 1)
        return 1;
    else
        return n*n + calculateBlocks(n-1);
}

int main()
{
    int givenN;
    cin >> givenN;

    int result = calculateBlocks(givenN);
    cout << "TOTAL BLOCKS: " << result << endl;

    int totalHours  = (result - (result%3))/3;
    int remainingMin = 60*(result%3)/3;
    int totalDays   = (totalHours-(totalHours%8))/8;
    int remainingHrs = (totalHours%8);
    cout << "It takes " << totalDays << " days, " << remainingHrs << " hours and " << remainingMin << " minutes.";
    return 0;
}
0 oy
2 Mayıs 2015 darknight Stajyer (550 puan)   cevapladı
package isanaliz;

import java.util.Scanner;

public class İsAnaliz {
    public static void main(String[] args) {
        Scanner klavye = new Scanner(System.in);
        System.out.println("N sayısı giriniz : ");
        int N = klavye.nextInt();
        double gunlukMesai = 8,toplamBlok = 0;
        double gün,saat;
        for (int i = 0; i < N; i++) {
            toplamBlok += (N-i)*(N-i);
        }
        System.out.println(toplamBlok);
        gün = toplamBlok/(gunlukMesai*3);
        saat = gün*24;
        System.out.println(gün+" günde ve "+saat+" saatte biter");
    }
}
0 oy
2 Mayıs 2015 salihsamet Stajyer (660 puan)   cevapladı
//JAVA

import java.util.Scanner;

public class Soru6 {
    public int toplam(int n){
        return (n*(n+1))/2;
    }
    public void zaman(int n){
        if(toplam(n)/24!=0)
            System.out.println(toplam(n)/24+" gün ");
        if(toplam(n)%24!=0)
            System.out.println((double)(toplam(n)%24)/3+" saat ");
    }

    public static void main(String[] args) {
        Scanner k = new Scanner(System.in);
        int n = k.nextInt();
        Soru6 s = new Soru6();
        System.out.println("Toplam blok sayısı: " + s.toplam(n));
        s.zaman(n);

    }

}
0 oy
2 Mayıs 2015 koko Stajyer (540 puan)   cevapladı
class yarisma {
    public static void main(String args[]) throws Exception
    {

    int n, saat, gun, sum, i;

    sum=0;
    System.out.print("kat sayisi giriniz: ");
    n=Keyboard.readInt();
    
    for(i=0; i<=n; i=i+1)
        sum=sum+(i*i);
    System.out.println("1. Bu insa " + sum +" tas bloktan olusur.");
    saat=sum/3;
    gun=saat/8;
    if(saat>8)
        System.out.print("2. Toplam " + gun +" gun ve " + n%8 + " saat surer.");
    else
        System.out.print("2. Toplam " + saat + " saat surer.");
    }
}
0 oy
2 Mayıs 2015 ysferdgnn Stajyer (820 puan)   cevapladı
class Program
    {
        public int  blokhesapla(int x){
            int toplam = 0;
            for (int i = 1; i <=x; i++)
            {
                toplam=toplam+(i*i);
            }
            return toplam;
        }
        public static void günhesapla(int bloksayisi)
        {
            int artıksaat=0;
            int toplamsaat = bloksayisi / 3;
            int dakika = (bloksayisi % 3)*20;
             artıksaat = toplamsaat % 8;
            int gün = toplamsaat / 8;
            if (bloksayisi == 1)
            {
                dakika = 20;
            }
            
            Console.WriteLine("Toplam Saat: "+toplamsaat+"\nGün: "+gün+"\nSaat: "+artıksaat+"\nDakika:"+dakika);

        }
        static void Main(string[] args)
        {
            Program p = new Program();
            int bloksayisi= p.blokhesapla(Convert.ToInt32(Console.ReadLine()));
            Console.WriteLine("\nBloksayisi: "+bloksayisi);
            günhesapla(bloksayisi);
            Console.ReadLine();

        }
    }
}
3 Mayıs 2015 ysferdgnn Stajyer (820 puan)   yorumladı
bloklar 1 yada 2 tane arttığı için 20 ile 40 dakika arasında sapma oluyordu o  yüzden onu da hesaplamak zorunda kaldım
0 oy
2 Mayıs 2015 İbrahim Bayrak Stajyer (540 puan)   cevapladı
Scanner scn=new Scanner(System.in);
        System.out.println("sayiyi giriniz");
     int n=scn.nextInt();
     int gün,saat,blok=0;
        for (int i = n; i > 0; i--) {
         blok+=i*i;
        }
        System.out.println("blok sayısı :"+blok);
        gün=blok/24;
        saat=blok%24;
        System.out.println("inşaat "+gün+" gün "+saat+" saatte  biter.");
0 oy
2 Mayıs 2015 haylaz692 Stajyer (540 puan)   cevapladı
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int tugla(int n);

int main()
{
    int n,i;
    printf("kac katli olucak:");
    scanf("%d",&n);
    float toplam;
    toplam=tugla(n);

    int zaman;
    zaman=ceil(toplam/3);

    int gun,saat;

    saat=zaman%8;
    gun=zaman/8;
    printf("\ntugla sayisi=%d",(int)toplam);
    printf("\ngun: %d \nsaat: %d",gun,saat);

    getchar();

}
int tugla(int n){
    int tp=0,i;
    for (i=n;i>0;i--){
        tp+=i*i;
    }
    return tp;
}
...