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: 2 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#ifdef REKURZIV
static int m;
void brutalis_rekurzio(char *buf, size_t len)
{
if (len == 0) {
m++;
return;
}
if (len > 2 && buf[2] == 0) {
brutalis_rekurzio(buf + 1, len - 1);
return;
}
if (len > 1 && buf[1] == 0) {
if (*buf > 2)
printf("hibas bemenet!!!\n");
brutalis_rekurzio(buf + 2, len - 2);
return;
}
brutalis_rekurzio(buf + 1, len - 1);
if (len > 1) {
if (*buf == 1 || (*buf == 2 && buf[1] <= 6))
brutalis_rekurzio(buf + 2, len - 2);
}
}
#else
size_t mar_nem_brutalis_nem_rekurzio(char *buf, size_t len)
{
size_t a = 1, b = 1, c, i;
for (i = 1; i < len; i++) {
if (buf[i] == 0) {
c = a;
} else if (buf[i - 1] == 1 ||
(buf[i - 1] == 2 && buf[i] <= 6)) {
c = a + b;
} else {
c = b;
}
a = b;
b = c;
}
return b;
}
#endif
void parse(char *buf)
{
char *b;
size_t len = 0;
b = buf;
while (*b) {
if (!isdigit(*b) && *b != '\n') {
fprintf(stderr, "Rossz szoveg\n");
return;
}
if (*b == '\n')
break;
*b -= '0';
b++;
len++;
}
#ifdef REKURZIV
m = 0;
brutalis_rekurzio(buf, len);
printf("megoldas: %d\n", m);
#else
printf("megoldas: %u\n", mar_nem_brutalis_nem_rekurzio(buf, len));
#endif
}
int main(int argc, char **argv)
{
char buffer[1024], *buf = 0, *new;
size_t len = 0, l = 0;
while (fgets(buffer, 1024, stdin)) {
l += strlen(buffer) + 1;
if (l > len) {
new = realloc(buf, l * sizeof(char));
if (!new) {
perror("realloc");
free(buf);
return 1;
}
if (!buf)
*new = '\0';
len = l;
buf = new;
}
strcat(buf, buffer);
if (strchr(buffer, '\n')) {
parse(buf);
l = 0;
*buf = '\0';
}
}
if (buf)
free(buf);
return 0;
}