Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 4 KB
#include <stdio.h>
#ifdef KEP
#include <gd.h>
#include <gdfonts.h>
#endif
char tomb[100][100], a[100], b[100], honnan[100][100];
size_t a_len, b_len;
#define H_ATLO 1
#define H_BAL 2
#define H_FEL 3
#define H_KIRALY 4
int beolvas()
{
char buffer[128];
size_t i;
if (!fgets(buffer, 128, stdin)) {
printf("hibas bemenet\n");
return 0;
}
for (i = 0; i < 128; i++)
if (buffer[i] == 'A' || buffer[i] == 'C' ||
buffer[i] == 'G' || buffer[i] == 'T')
a[i] = buffer[i];
else
break;
a_len = i;
if (!fgets(buffer, 128, stdin)) {
printf("hibas bemenet\n");
return 0;
}
for (i = 0; i < 128; i++)
if (buffer[i] == 'A' || buffer[i] == 'C' ||
buffer[i] == 'G' || buffer[i] == 'T')
b[i] = buffer[i];
else
break;
b_len = i;
return 1;
}
int t(int i, int j)
{
if (i < 0 || j < 0)
return 0;
return tomb[i][j];
}
int db()
{
int i, j, x, y;
for (i = 0; i < a_len; i++)
for (j = 0; j < b_len; j++)
if (a[i] == b[j]) {
tomb[i][j] = t(i - 1, j - 1) + 1;
honnan[i][j] = H_ATLO;
} else {
x = t(i - 1, j);
y = t(i, j - 1);
if (x >= y) {
tomb[i][j] = x;
honnan[i][j] = H_BAL;
} else {
tomb[i][j] = y;
honnan[i][j] = H_FEL;
}
}
return tomb[a_len - 1][b_len - 1];
}
char *leghosszabb()
{
static char buffer[128];
int i, j, l = 127;
i = a_len - 1;
j = b_len - 1;
buffer[l--] = '\0';
while (i >= 0 && j >= 0) {
switch (honnan[i][j]) {
case H_ATLO:
buffer[l--] = a[i];
honnan[i][j] = H_KIRALY;
i--;
j--;
break;
case H_BAL:
i--;
break;
case H_FEL:
j--;
break;
}
}
return &buffer[l + 1];
}
#ifdef KEP
void kep()
{
gdImagePtr im;
gdFontPtr f;
int feher, fekete, piros, szin;
size_t maxx, maxy, i, j, x, y;
char num[4];
f = gdFontSmall;
maxx = (3 * f->w + 11) * (a_len + 1);
maxy = (1 * f->h + 11) * (b_len + 1);
im = gdImageCreate(maxx + 1, maxy + 1);
if (!im) {
printf("nem tudom letrehozni a kepet\n");
return;
}
feher = gdImageColorAllocate(im, 255, 255, 255);
fekete = gdImageColorAllocate(im, 0, 0, 0);
piros = gdImageColorAllocate(im, 255, 0, 0);
for (i = 0; i < a_len + 1; i++) {
x = i * (3 * f->w + 11);
gdImageLine(im, x, 0, x, maxy, fekete);
}
for (i = 0; i < b_len + 1; i++) {
y = i * (1 * f->h + 11);
gdImageLine(im, 0, y, maxx, y, fekete);
}
gdImageLine(im, 0, maxy, maxx, maxy, fekete);
gdImageLine(im, maxx, 0, maxx, maxy, fekete);
for (i = 0; i < a_len; i++) {
x = (i + 1) * (3 * f->w + 11);
szin = fekete;
for (j = 0; j < b_len; j++)
if (honnan[i][j] == H_KIRALY) {
szin = piros;
gdImageFilledRectangle(im, x, 0,
x + 3 * f->w + 10,
1 * f->h + 10, fekete);
break;
}
gdImageChar(im, f, x + 6, 6, a[i], szin);
}
for (i = 0; i < b_len; i++) {
y = (i + 1) * (1 * f->h + 11);
szin = fekete;
for (j = 0; j < a_len; j++)
if (honnan[j][i] == H_KIRALY) {
szin = piros;
gdImageFilledRectangle(im, 0, y,
3 * f->w + 10,
y + 1 * f->h + 10,
fekete);
break;
}
gdImageChar(im, f, 6, y + 6, b[i], szin);
}
for (i = 0; i < a_len; i++) {
for (j = 0; j < b_len; j++) {
snprintf(num, 4, "%3d", tomb[i][j]);
x = (i + 1) * (3 * f->w + 11);
y = (j + 1) * (1 * f->h + 11);
if (honnan[i][j] == H_KIRALY)
gdImageFilledRectangle(im, x, y,
x + 3 * f->w + 10,
y + 1 * f->h + 10,
fekete);
gdImageString(im, f, x + 6, y + 6, (unsigned char *)num,
(honnan[i][j] == H_KIRALY) ? piros
: fekete);
}
}
gdImagePng(im, stderr);
gdImageDestroy(im);
}
#endif
int main()
{
if (!beolvas())
return 1;
printf("%u\r\n", db());
printf("%s\r\n", leghosszabb());
#ifdef KEP
kep();
#endif
return 0;
}