Evo i moja resenja u C jeziku, ako nekoga interesuje...
Prvi:
Kod:
#include <stdio.h>
#include <stdlib.h>
long i,j,n,k,a[9],m,p;
void raz(long *a,long *b) {
long p;
p=*a;
*a=*b;
*b=p;
}
void ispisi() {
long i,j,s;
for (j=m-1;j<n && p;j++) {
raz(&a[m-1],&a[j]);
s=0;
for (i=0;i<m;i++) s+=a[i];
if (s==100) {
for (i=0;i<m;i++) printf("%ld\n",a[i]);
printf("\n");
p=0;
}
raz(&a[m-1],&a[j]);
}
}
void rek(long t,long tr) {
long i;
if (t>m || tr>n) return;
if (t==m) ispisi();
else
for (i=0;i<n-tr && p;i++) {
raz(&a[tr],&a[tr+i]);
rek(t+1,tr+1);
raz(&a[tr],&a[tr+i]);
}
}
int main() {
printf("Unesite devet brojeva:\n");
n=9; m=7;
for (i=0;i<n;i++) scanf("%ld",&a[i]);
p=1;
printf("\nResenje:\n");
for (i=0;i<n && p;i++) {
raz(&a[0],&a[i]);
rek(1,i);
raz(&a[0],&a[i]);
}
system("pause");
}
Drugi:
Kod:
#include <stdio.h>
#include <stdlib.h>
long i,j,n,m,k,d,g,s,p,t,k1,k2;
char a[100];
void raz(char *a, char *b) {
char p;
p=*a;
*a=*b;
*b=p;
}
int main() {
printf("Duzina prvog niza: "); scanf("%ld",&n);
printf("Duzina drugog niza: "); scanf("%ld",&m);
printf("Prvi niz: ");
for (i=n-1;i>=0;i--) {
scanf("%c",&a[i]);
if (a[i]==10) i++;
}
printf("Drugi niz: ");
for (i=n;i<m+n;i++) {
scanf("%c",&a[i]);
if (a[i]==10) i--;
}
d=n-1;
g=n;
n=n+m;
printf("Granica: "); scanf("%ld",&t);
k1=1; k2=1;
for (i=0;i<t;i++) {
for (j=d;j<=g-1;j+=2) raz(&a[j],&a[j+1]);
if (k1>0) d--;
else d++;
if (k2>0) g++;
else g--;
if (d==-1) { d=1; k1=-k1; }
if (g==n) { g=n-1;k2=-k2; }
}
printf("\nIzlaz: ");
for (i=0;i<n;i++) printf("%c",a[i]);
printf("\n\n");
system("pause");
}
Treci:
Kod:
#include <stdio.h>
#include <stdlib.h>
long i,j,n,m,k,a[1000];
void ispisi() {
long i;
printf("\t");
for (i=0;i<k-1;i++) printf("%ld+",a[i]);
printf("%ld",a[k-1]);
printf("\n");
}
void rek(long t,long q,long s) {
long i;
a[t]=q;
s+=q;
if (t>k || s>n) return;
if (s==n && t==k-1) ispisi();
else
for (i=n;i>0;i--) rek(t+1,i,s);
}
int main() {
printf("Unesite N: "); scanf("%d",&n);
printf("Unesite K: "); scanf("%d",&k);
for (i=n;i>0;i--) rek(0,i,0);
system("pause");
}
Cetvrti:
Kod:
#include <stdio.h>
#include <stdlib.h>
long a[300][300],b[300][300],i,j,n,m,max,p,t,k,s,d,f,g;
char c;
int ubica(long w) {
long p=1,i,j;
for (i=0;i<w && p;i++)
for (j=0;j<w && p;j++)
if (b[i][j]!=b[w-1-i][w-1-j]) p=0;
return p;
}
void stampaj(long w) {
long i,j;
for (i=0;i<w;i++) {
for (j=0;j<w;j++) printf("%ld ",a[i][j]);
printf("\n");
}
}
long min(long a,long b) {
if (a<b) return a;
else return b;
}
int main() {
printf("Broj redova: "); scanf("%ld",&n);
printf("Broj kolona: "); scanf("%ld",&m);
printf("Unesite memoriju:\n");
max=0;
for (i=0;i<n;i++)
for (j=0;j<m;j++) {
scanf("%c",&c);
if (c=='1') a[i][j]=1;
if (c=='0') a[i][j]=0;
if (c!='0' && c!='1') j--;
}
for (i=0;i<n;i++)
for (j=0;j<m;j++)
for (k=2;k<min(m-j,n-i)+1;k++) {
for (s=0;s<k;s++)
for (d=0;d<k;d++)
b[s][d]=a[s+i][d+j];
if (ubica(k))
if (k>max) max=k;
}
if (max) printf("\n%ld\n\n",max);
else printf("\n-1\n\n");
system("pause");
}
Razlikuju se od Nemanjinih resenja, pa eto da ucimo jedni od drugih...