Кајгана CodeOpen. Reopened!

Статус
Затворена за нови мислења.
Член од
24 август 2007
Мислења
761
Поени од реакции
15
Грешка во чекори :)

Бришење овде.
 
Член од
19 септември 2005
Мислења
5.616
Поени од реакции
180
CodeOpen - Round 4 - резултати

Добив 2 одговори....

skrstevsky и deXterche

skrstevsky (во C++)
За жал неточно. Пример ова вади и 5/10 и 1/2.... + не ги сортира. Уште малку фалеше...
PHP:
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int n=63;

    cout<<"0/1;"<<" 1/1;";

    for(int i=0; i<n+1; i++)
        for(int j=0; j<n+1; j++)
            if(((i%2!=0||j%2!=0)&&(i%3!=0||j%3!=0))&&((float(i)/float(j))<=1.0)&&(i!=j)&&(i!=0))
               cout<<" "<<i<<'/'<<j<<";";

    return 0;
}
deXterche. Многу го искомплицирал, можеше покомпактно, но, отприлика тоа е тоа што се бараше
PHP:
public class Main {

    public static String dropki(int broj) {
        String izlez = "0/1";
        int brojac = 0;
        int brojac1 = 1;
        int brojac2 = 1;
        double niza[] = new double[broj * broj];
        double niza2[] = new double[broj * broj];
        for (double i = 1; i <= broj; i++) {
            for (double j = 1; j <= i - 1; j++) {
                if (j == 1) {
                    niza[brojac] = j / i;
                    niza2[brojac] = brojac2 / brojac1;
                    brojac++;
                }
                if (i % j != 0 && ((i % 2) + (j % 2)) != 0 && ((i % 3) + (j % 3)) != 0 && ((i % 5) + (j % 5)) != 0 && ((i % 7) + (j % 7)) != 0) {
                    niza[brojac] = j / i;
                    niza2[brojac] = brojac2 / brojac1;
                    brojac++;
                }
                brojac2++;
            }
            brojac1++;
            brojac2 = 1;
        }
        double mem;
        double mem2;
        int od = 0;
        for (int i = 0; i <= brojac - 1; i++) {
            for (int j = 0; j <= brojac - 2; j++) {
                if (niza[j] == niza[j + 1] && niza[j] >= 0) {
                    niza[j + 1] = -1;
                    //niza2[j + 1] = "-1";
                    od++;
                } else {
                    if (niza[j] > niza[j + 1] && niza[j] >= 0) {
                        mem = niza[j + 1];
                        mem2 = niza2[j + 1];
                        niza[j + 1] = niza[j];
                        niza2[j + 1] = niza2[j];
                        niza2[j] = mem2;
                        niza[j] = mem;
                    }
                }
            }
        }
        for (int i = od; i <= brojac - 1; i++) {
            izlez += " " + niza2[i];
        }
        brojac = brojac - od + 2;
        System.out.println("Ima vkupno " + brojac + " dropki");
        return izlez;
    }

    public static void main(String[] args) {
        System.out.println(dropki(27) + " 1/1");
    }
}
deXterche 3 бода и мандат за нова задача
 

deXterche

тадаммм
Член од
12 февруари 2006
Мислења
4.920
Поени од реакции
941
Делот со сортирање малце зезаше, мораше да се употреби низа кај што ќе се запишуваат резултатита па тие да се сортираат...тоа искомплицира, а и жешко беше па се брзав за на плажа:vozbud:

Ај малце одмор (утре вечер (или задутре) нова задача)
 
Член од
24 август 2007
Мислења
761
Поени од реакции
15
Ова работи:

Код:
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int m=86;
    int n=m+1;

    bool write=false;

    float A[n][n];

    for(float i=0; i<n; i++)
        for(float j=0; j<n; j++)
            A[int(i)][int(j)]=0.0;

    for(float i=1; i<n; i++)
        for(float j=i; j<n; j++)
            {
               for(float p=1; p<=i; p++)
                   for(float o=p; o<=j; o++)
                       if(int((i/j)*1000000)==int(A[int(p)][int(o)]*1000000))
                          {
                              A[int(i)][int(j)]=-1;
                              p=o=n+1;
                              write=false;
                          }
                       else
                           {
                              write=true;
                           }
               if(write)
                 A[int(i)][int(j)]=float(i)/float(j);
            }

    cout<<"0/1;"<<" 1/1;";

    for(int i=1; i<n; i++)
        for(int j=i; j<n; j++)
            if(A[i][j]!=0&&A[i][j]!=1&&A[i][j]!=-1)
                cout<<" "<<i<<'/'<<j<<";";

    cout<<endl;

    return 0;
}
Какво сортирање се бара не знам. . .
 
Член од
19 септември 2005
Мислења
5.616
Поени од реакции
180
Не, на тестот од 23 тоа ми врати 175 (а треба 173)
Пример го врати 18/20;... што е исто со 9/10;

Сортирањето беше по големина на дропката. Најмала е 1/23 па 1/22........ 1/1
 

deXterche

тадаммм
Член од
12 февруари 2006
Мислења
4.920
Поени од реакции
941
Нов проблем

Броеви завртени наопаку (завртени броеви)

Завртени броеви се арапски броеви на кои редоследот им е наопчки. Првата цифра постанува последна, наредната предпоследна итн. За пример, ако го имаме бројт 1245, 5421 е негов еквивалент во обратен редослед. Запазеде на нулите. Ако еден број завршува со нула пример 1200, негов еквивалент ќе биде истиот број но без нули во примеров 21. Исто завртениот број никогаш нема нула на крајот.

Ваша задача е од внесени два завртени броја да ја најдете нивната завртена сума. Секако резултатот никогаш не е уникатен бидејќи секој завртен број може да биде еквивалент на повеќе, пример ( 21 може да биде еквивалент на 12, 120, 1200 итн). Запазете на нулите.

Влез
Влезот N несмее да биде поголем од 10000. Секој случај се состои од исклучуво два позитивни интеџери на една линија одделени со празно место. Тоа се превртените броеви кои треба да ги внесете.

Излез

Испринтај по една линија за резултатот во интеџер - завртена сума од два завртени броеви. Исклучи ги нулите кои се наоѓаат напред во сумата.

Пример


Влез:
3
24 1
4358 754
305 794

Излез:
34
1998
1
______________________________

Влез:
10 234
2340 9210
530 56

Излез:
???

Бидејќи не пишав однапред дека ќе има вечерва задача ќе го поместам крајниот рок

Краен рок 14.07.2008 12:00
 

deXterche

тадаммм
Член од
12 февруари 2006
Мислења
4.920
Поени од реакции
941
Добив 3 решенија, не ги тестирав само од око ги проценав, причина: ниту едно не беше во Java (две во C++ и едно во PHP). Во иднина најдобро е сите решенија да бидат во Java ради тестирање и полесна проценка на кодот. Некако така се завлече на почеток во Java па почнаа да се праќаат и во друго програмски јазици (дури и паскал имаше едно :vozbud:)

Горе долу сите решениа беа слични, некој повеќе некој помалце комплицирал

Еве ги резултатите

Имаме и дебитант, dexter09 3 поен, најсреден код, и само тој ми испрати резултати од тест примерите. Ти си мандатар за следниот цилкус

PHP:
#include <iostream>
#include <iomanip>
using std::cout;
using std::cin;
using std::endl;
using std::istream;

class br_parovi{
public:
    int broj1;
    int broj2;
        int    vrati_broj1(){
                return broj1;
        }
        int vrati_broj2(){
                return broj2;
        }


        friend istream &operator>>(istream&, br_parovi &);

};

    
istream &operator>>(istream &vnesi, br_parovi &par){

    vnesi>>par.broj1;
    vnesi.ignore(1);
    vnesi>>par.broj2;
    return vnesi;
}

int zavrti_broj(int broj){

    int zavrten=0;
    int cifra;
    do{
        cifra=broj%10;
        broj=broj/10;
        zavrten=(zavrten*10)+cifra;
    }
    while(broj!=0);


return zavrten;
}

void main()

{

    int N;
    br_parovi * parovi;
    int * rezultati_zavrteni;
    cout<<" VLEZ********** "<<endl;
    cin>>N;

    parovi=new br_parovi[N];
    rezultati_zavrteni=new int[N];

    for(int br=0;br<N;br++){
        cin>>parovi[br];
    }



    for(br=0;br<N;br++){
        rezultati_zavrteni[br]=0;
    rezultati_zavrteni[br]=zavrti_broj(parovi[br].broj1)+zavrti_broj(parovi[br].broj2);
        rezultati_zavrteni[br]=zavrti_broj(    rezultati_zavrteni[br]);
    }

    cout<<endl;
    cout<<endl;
cout<<"IZLEZ************"<<endl;

for(br=0;br<N;br++){
    cout<<    rezultati_zavrteni[br]<<endl;
}
cout<<endl;
cout<<endl;

cin.get();


}


skrstevsky 2 поена, за прво решение, доста си го замрсил

PHP:
#include <iostream>
#include <cmath>

using namespace std;

int stepen(int osnova, int pokazatel)
{
    int rez=1;
    for(int i=0; i<pokazatel; i++)
            rez*=osnova;
 
    return rez;

}

int main()
{
    int a, b;
    int oa=0, ob=0;
    int osuma=0, ksuma=0, tempa, tempb, otemp, cifra=0;
    int bra=0, brb=0, brs=0;

    cout<<"Vnesi 2 broja"<<endl;
    cin>>a>>b;

    tempa=a;
    while(tempa>0)
         {
            tempa/=10;
            bra++;
         }

    tempb=b;
    while(tempb>0)
         {
            tempb/=10;
            brb++;
         }

    for(int i=bra-1; i>=0; i--)
        {
            cifra=a%10;
            a/=10;
            oa+=cifra*stepen(10, i);
        }

    for(int i=brb; i>=0; i--)
        {
            cifra=b%10;
            b/=10;
            ob=ob+cifra*stepen(10,i-1);
        }

    osuma=oa+ob;

    otemp=osuma;
    while(otemp>0)
         {
            otemp/=10;
            brs++;
         }

    for(int i=brs; i>=0; i--)
        {
            cifra=osuma%10;
            osuma/=10;
            ksuma=ksuma+cifra*stepen(10,i-1);
        }

    cout<<"Sumata iznesuva: "<<ksuma<<endl;

    return 0;
}
Димитар 1 поен, (се мислев меѓу тебе и декстер09, од декстер09 решението најмногу се приджуваше спрема барањата)

PHP:
<?php

function Prevrten($niza)
{
    for ($i=1;$i<=$niza[0];$i++)
    {
        $zbir=0;
        for ($j=0;$j<2;$j++)
        {
            $broj=$niza[$i][$j];
            $obr =0;
            while($broj>0)
            {
                $ost=$broj %10;
                $obr*=10;
                $obr+=$ost;
                $broj=(int)($broj/10);
            }
            $zbir+=$obr;        
        }
        $obrZbir = 0;
        while($zbir>0)
            {
                $ost1=$zbir %10;
                $obrZbir*=10;
                $obrZbir+=$ost1;
                $zbir=(int)($zbir/10);
            }
        echo $obrZbir. "<br>";
    }
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">    

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>
<?php
$niza = array( 
3,
array(10,234),
array(2340,9210),
array(530,56)
);
Prevrten($niza);
?>
</body>
</html>
Ниту едно не го имам тестирано, мислам дека најдобро ќе биде да воведиме правило само во јава да се даваат решенија
 
Член од
24 август 2007
Мислења
761
Поени од реакции
15
Ај не само Java :) нека има и C++. :nenene:
 

back_rest

ex mod coder
Член од
19 јули 2006
Мислења
1.590
Поени од реакции
107
Ниту едно не го имам тестирано, мислам дека најдобро ќе биде да воведиме правило само во јава да се даваат решенија
Не можит. Секој може да програмира во кој јазик сака.
Наместо вие да компајлирате и да тестирате секое решение посебно, убаво напишав механизам во првиот пост.
- Како фактор за досудување на точноста на задачата, поставувачот задава неколку тест случаеви, а очекува точен одговор на истите.
- Одговорите можат да бидат во било кој програмски јазик (сепак се препорачуваат C++ и Java). Првин членовите ги даваат одговорите на понудените тест случаеви, па потоа кога ќе заврши времето за чекање, поставувачот ги соопштува решенијата, и бара од сите членови кои дале точен одговор, кодот да го пастираат во најможно скоро време. Оние кои нема да пастираат код, не се земаат во обзир. Поставувачот е должен да приложи и соодветно оптимизирано решение.
 
Член од
22 февруари 2007
Мислења
7.076
Поени од реакции
1.940
Не можит. Секој може да програмира во кој јазик сака.
Наместо вие да компајлирате и да тестирате секое решение посебно, убаво напишав механизам во првиот пост.
Мала забелешка околу ова. Да не ме сфатиш погршно ми се допаѓа идејата секој да можи да кодира во кој јазик сака, ама размисли ако некој ти прати решение во Пролог, Лисп, Перл и слично, мене или веројатно тебе нема да ни е проблем ама малку ќе се помачиме а за многу од другите би било проблем. Затоа мислам дека е разумно да се ограничат јазиците на јава, ц, и паскал(некои го знаат само него).

Од друга страна ако планираш пак да се праќаат само резултати треба да се даваат проблеми во кои има поинтензивни пресметки и да не е така лесно да се решат на памет или со брутффорс.
 
Член од
1 април 2006
Мислења
273
Поени од реакции
4
Задача : Факторизација на Природен Број!!!

Факторизација на природен број претставува претставувањето на бројот како производ на ПРОСТИ броеви на одреден степен.

Задачата се состои од , за даден природен произволен број да се најде производот од прости броеви(фактори) на некоја степен(степенот на бројот не мора да биде прост број) кој како резултат го дава внесениот природен број. Примери :

Внесен број: 1250 = 2‘1 * 5‘4 .
Бројот 1250 се претставува како производ на простите броеви 2(на степен 1) и простиот број 5(на степен 4) или 2 * 625 =1250

Други Примери:
139400= 2‘3 * 5‘2 * 17‘1 * 41‘1 <-- каде простите фактори се 2,5,17 и 41
17250=2‘1 * 3‘1 * 5‘3 * 23‘1 <-- прости фактори: 2,3,5 и 23
1620=2‘2 * 3‘4 * 5‘1 <-- прости фактори 2, 3 и 5.
и т.н.т.

За Вас:
--Влез:
11400
10050
55600
----------
Излез :
??????
??????
??????
---------------------
Рок: 16.07.2008 18:00 Часот. Среќно!!! :cheeky1:
 

back_rest

ex mod coder
Член од
19 јули 2006
Мислења
1.590
Поени од реакции
107
Мала забелешка околу ова. Да не ме сфатиш погршно ми се допаѓа идејата секој да можи да кодира во кој јазик сака, ама размисли ако некој ти прати решение во Пролог, Лисп, Перл и слично, мене или веројатно тебе нема да ни е проблем ама малку ќе се помачиме а за многу од другите би било проблем. Затоа мислам дека е разумно да се ограничат јазиците на јава, ц, и паскал(некои го знаат само него).

Од друга страна ако планираш пак да се праќаат само резултати треба да се даваат проблеми во кои има поинтензивни пресметки и да не е така лесно да се решат на памет или со брутффорс.
И тоа што велиш... не се ограничив.
Да, држете се на „конвенционалните јазици“. php, perl и ruby може, се разбираат колку толку и слични се, ама Prolog, Lisp, A, B и слични, јок. Претпочитајте Java, C/C++, Паскал за средношколците :) и евентуално VB.
А тоа за резултатите ... види, не е целта да се мери брзината на извршување во милисекунди па да се утврди најдоброто решение. Директно се гледа доброто решенија на база на комплексноста, а фор во фор лесно се приметува. Друго, работа на поставувачот на задачата е да даде прашални случаеви кои не се решаваат на памет или со брут форс. Мислам дека тоа се прочита помеѓу редовите. Ако некој друг си нема работа и сака да си отече мадињата, нека повели :)
 
Член од
1 април 2006
Мислења
273
Поени од реакции
4
За последната задача добив два кода. Прв решение ми прати count_vlad , втор беше Димитар. Следува Кодот.


Димитар - PHP :

Код:
<?php
    function prost($i)
    {
        if(($i % 2 != 1) &&($i!=2))
            return false;
        $d = 3;
        $x = sqrt($i);
        while ($i % $d != 0 && $d < $x) 
            $d += 2;
        return (($i % $d == 0 && $i != $d) * 1) == 0 ? true : false;
    }
    
    function proverka($broj)
    {
    $mnozenje = 1;
    $tekst ="";
        for ($i=2;$i<$broj/2;$i++)
        {
            $brojac=0;
            if (prost($i)==true)
                {
                    while ($broj%$i==0)
                    {
                        $brojac++;
                        $mnozenje*=$i;        
                        $broj=$broj/$i;                        
                    }
                    if ($brojac>0)    $tekst = $tekst.$i."^".$brojac."*";            
                }            
        }
        if ($broj!=1) echo $tekst."$broj^1=".$broj*$mnozenje;
        if ($broj==1) echo rtrim($tekst, '*')."=".$broj*$mnozenje;
        echo "<br>";
    }
    ?>
<html>    
<head>

</head>
<body>
<?php
proverka(11400);
proverka(10050);
proverka(55600);
?>
</body>
</html>
---------------
count_vlad - C++
Код:
void Fpb(int broj)
{
stack<int>faktor,stepen;
assert(broj >= 0);
       for(int i = 2; i <=broj ; i++){ 
                     if(broj % i == 0){ 
                     bool prost = true;
                            for(int j = 2; j < i; j++){
                                    if(i % j == 0) 
                                    prost = false;
                            }
                      if(prost){
                         faktor.push(i);
                        int stp=0;
                                while(broj%i==0){
                                         broj/=i; 
                                        ++stp;
                                 }
                       stepen.push(stp);
                  }
              }
  }
------------------------------
Кодот на Димитар е пооптимизиран , посебно функцијата за проверка дали некој број е прост( проверка на делители до коренот на бројот). Па Димитар добива 3 поени . count_vlad добива 2 поени. Димитар е мандатар за следната задача!!!:smir:
 
Статус
Затворена за нови мислења.

Kajgana Shop

На врв Bottom