Takmičenje je završeno, zvanično, prvi je jedan momak kog ne poznajem, drugio je [KS] a treći ja. Razmišljam da li da se žalim profesoru zaduženom za zadatke, ili jednostavno da isquliram jer idem dalje itako i ovako
Evo prvog zadatka (zadaci su dati u skraćenoj formi):
20 Bodova
Dat je broj n (moze biti 3 5 i 7). Ispisati sve brojeve sa n cifara koji su dijeljivi sa brojem koji nema srednju cifru.
Primjer, za ulaz 3 izlaz treba biti : 105 108 - jer 105 je djeljivo sa 15 a 108 je djeljivo sa 18 etc.
riješenje:
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int pow(int);
int main (int argc, char** argv) {
int i;
int k;
int pocetak;
int kraj;
int d;
char s[256];
int srednji;
int n;
printf("Unesi n ");
scanf("%d",&n);
if (n<3 || n>7) {
printf("\nGreska, 2<n<8 !");
getch();
return 0;
}
srednji = (n-1)/2;
pocetak= (int) pow(n-1);
kraj = pocetak*10;
for (i=pocetak; i<kraj; i++) {
itoa(i,s,10);
d=0;
for (k=0; k<n; k++)
if (k!=srednji) {
d*=10;
d+=s[k]-'0';
}
/*
Objasnjenje za citaoce. U slijedecoj liniji, lapsus, napisao sam
if (i % k == 0) , dakle nekako mi se omaklo i umjesto d napisao sam k
Zbog ovoga je cijeli zadatak bio netacan :(
*/
if (i % d == 0)
printf("\n%d", i);
}
printf("\nKRAJ");
getch();
}
int pow(int b) {
int r=1;
int i;
for (i=0; i<b; i++)
r*=10;
return r;
}
Drugi zadatak, 35 bodova:
PAZNJA> moje rijesenje kao prvo, ima jednu gresku koju cu pronaci kad budem imao vremena, opet neki lapsus, ali to samo u jednom od cetiri testna primijera.
Zadatak glasi:
Dat je binarni broj (1 0 1 0 1 1 npr). Napisati program koji određuje početnu poziciju, dužinu i broj ponavljanja najduže serije istih cifara.
Kod:
#include <conio.h>
#include <stdio.h>
int main(int argc, char** argv) {
int ulaz[33];
char slovo;
printf("Unesi binarni broj ");
// ulaz binarnog broja
int i=0;
int status=2;
while (1) {
scanf("%c",&slovo);
if (status==2) {
if (slovo!='1' && slovo!='0') {
printf("GRESKA U ULAZU\n");
getch();
return 0;
}
if (i>=32) {
printf ("maksimalno 32 karaktera!");
getch();
return 0;
}
ulaz[i]=slovo-'0';
i++;
} else if (slovo!=' ') {
if (slovo=='\n')
break;
printf("Unijeto slovo nije space!");
getch();
return 0;
}
status=3-status; // trik :) kad je status 2 postaje 1 i obrnuto :)
}
// algoritam
// naci najduzi niz
int br = 1; // broj ponavljanja
int start = 0;
int duzina = 1;
int cifra=ulaz[0];
int n=i;
// prvo naci
int t=1; // trenutna duzina
int lc=ulaz[0]; // zadnje slovo
if (n==1) {
printf(": 1 \n1 \n1\n");
getch();
return 0;
}
for (i=1; i<n; i++) {
if (ulaz[i]==lc) {
t++;
continue;
}
if (t>duzina) {
start = i-t+1;
duzina = t;
cifra = lc;
br=1;
}
else if (t==duzina && lc == cifra) {
br++;
}
t=1;
lc=ulaz[i];
}
printf("%d\n%d\n%d", start, duzina, br);
getch();
}
Zbog niske inteligencije ljudi koji su ispravljali zadatke, i ovdje je čiko popušio krompir

Konačno neki pošten zadatak...
Treći zadatak glasi:
Kod:
#include <conio.h>
#include <stdio.h>
// struktura za opis tacke
typedef struct Tacka {
int x;
int y;
} Tacka;
// globalne varijable
short m,n;
int niz[10][10];
// prototipovi funkcija
int algoritam();
void postavi(int,int);
Tacka nadji1();
// glavna funkcija
int main(int argc, char** argv) {
printf("Unesi M ");
scanf("%d",&n);
printf("Unesi N ");
scanf("%d",&m);
char ch[10];
int x,y;
for (y=0; y<n; y++)
for (x=0; x<m; x++) {
scanf("%s", &ch);
if (ch[0]!='0' && ch[0]!='1') {
printf("Prihvatam samo nule i jedinice!");
getch();
return 0;
}
niz[x][y]=ch[0]-'0';
}
// algoritam
int r = algoritam();
printf("\n%d", r);
printf("\nKRAJ");
getch();
}
int algoritam() {
// prvo da nadjem jednu jedinicu
Tacka t = nadji1();
if (t.x<0)
return 0;
// 1. naci blok
// odrediti velicinu, uporediti sa maksimumom
// traziti slijedeci blok
// sve dok ima jedinica
int max=0;
int tmp=0; // trenutni broj jedinica u bloku
niz[t.x][t.y]=2; // oznacim jedinicu koju sam nasao
int check=1;
int x,y;
while (1) {
// petlja za trazenje slijedećeg bloka
do {
check=-1;
for (x=0; x<m; x++)
for (y=0; y<n; y++) {
// ako je ova tacka oznacena
if (niz[x][y]==2) {
niz[x][y]=0;
check=1; // dakle ima ih jos
tmp++;
postavi(x,y); // onda oznacim i one oko nje
}
}
max = max>tmp ? max : tmp; // sredjivanje maksimuma
} while (check!=-1);
t=nadji1(); // nadji jedinicu
if (t.x<0) // ako nema vise jedinica u matrici
break;
niz[t.x][t.y]=2; // a ako ima onda oznaci
tmp=0;
}
return max;
}
Tacka nadji1() {
int px=-1;
int py=-1;
int x,y;
for (x=0; x<m; x++) {
for (y=0; y<n; y++)
if (niz[x][y]==1) {
px=x; py=y;
break; // izadji iz y
}
if (px>-1)
break; // izadji iz x
}
Tacka r;
r.x=px;
r.y=py;
return r;
}
void postavi(int a, int b) {
niz[a][b]=0;
int p;
// slijedeci blokovi su obradjeni u dva if-a, mogao sam sve staviti i u jedan
// ali to samo ako se uzdam u kvalitet compilera... za svaki slucaj sve je
// rastavljeno u dva grananja
// gore
p=b-1;
if (p >= 0)
if (niz[a][p]==1)
niz[a][p]=2;
// dole
p=b+1;
if (p < n)
if (niz[a][p]==1)
niz[a][p]=2;
// levo
p = a-1;
if (p >= 0)
if (niz[p][b]==1)
niz[p][b]= 2;
// desno
p = a+1;
if (p<m)
if (niz[p][b]==1)
niz[p][b]=2;
}
Ovaj zadatak, za divno čudo nekako se desilo da se način razmišljanja njihovog mozga poklopio sa mojim, i tu sam dobio neke bodove 25. I ovdje imam primijedbu, ali neću vas da zamaram, možda kasnije kad se odmorim i budem imao vremena
Pozdrav narode, slobodno postavite neko pitanje, ja znam da sam dobio samo četvrtinu bodova

ali nemojte da me omaložavate zbog toga
