arrays - 细菌数量玻璃覆盖率

标签 arrays c recursion

#include <stdio.h>
#include <stdlib.h>

int kl = 1;
int bakterie(int n,int arr[n], int poziom, int j)
{
    int suma = 0;
    if (arr[j] == 0)
    {
        suma = suma;
    }
    if (arr[j] == 1)
    {
        suma += poziom;
    }
    if (arr[j] == 2)
    {
        for (int m = 1;m<=4;m++)
        {
            suma+=bakterie(n,arr,poziom/4,kl);
            printf("%d",suma);
            printf(",");
            printf("%d",kl);
            printf("\n");
            kl++;
        }
    }
    return suma;
}
int main() {
    int i=0,last_2=0,poziom=1;
    int arr[99999];
    char temp;
    do {
        scanf("%d%c", &arr[i], &temp);
        if (arr[i] == 2)
        {
            if(last_2<=4)
            {
                poziom = poziom*4;
            }
            last_2 = 0;
        }
        last_2++;
        i++;
    } while(temp != '\n');

    int n0 = bakterie(i,arr,poziom,0);
    int n1 = n0;
    int n3 = poziom;
    int n2 = n3;
    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("%d",n0/n1);
    printf("/");
    printf("%d",n3/n1);

    return 0;


  return 0;
}

任务:

方形玻璃上有活细菌,它们的排列方式取决于用户输入:

2 表示细菌已将正方形分割成 4 个较小的正方形,接下来的 4 个用户输入整数描述了它们如何分割(您可以遇到用户输入为 2 2 2 的递归情况。 ..)

1表示细菌占据整个正方形

0表示该方格上没有细菌

(您可能假设用户输入是正确的(它不会提前结束或包含大于 2 的数字))

您必须计算细菌覆盖了多少玻璃。输出必须是不可约分数的形式。

示例:

输入:0

输出:0/1

输入:2 1 0 1 1

输出:3/4

输入:2 0 2 0 1 1 0 2 0 1 0 1 1

输出:1/2

我编写这段代码已经有一段时间了,我感觉已经非常接近完成任务了。我在这部分遇到问题:

int kl = 1;
int bakterie(int n,int arr[n], int poziom, int j)
{
    int suma = 0;
    if (arr[j] == 0)
    {
        suma = suma;
    }
    if (arr[j] == 1)
    {
        suma += poziom;
    }
    if (arr[j] == 2)
    {
        for (int m = 1;m<=4;m++)
        {
            suma+=bakterie(n,arr,poziom/4,kl);
            printf("%d",suma);
            printf(",");
            printf("%d",kl);
            printf("\n");
            kl++;
        }
    }
    return suma;
}

首先,我将 kl 设为函数 bakterie 中的局部变量,可以说它适用于最多需要两层“递归深度”的输入。但我很快意识到,如果有更多的话,事情就会变得一团糟。因此,我尝试将其设为全局变量,但遗憾的是,在使用 sumakl 打印出第一行后,程序中止(我将其放在那里是为了调试目的)。我真的不明白为什么,我希望在这里发个帖子可以澄清问题。提前致谢。

最佳答案

这整件事很神秘,但使用 kl = 0 而不是 1 并在 suma+=... 之前添加 kl++... 成功了。我还是不明白这些。

这是最终编辑的代码:

#include <stdio.h>
#include <stdlib.h>
int kl = 0;
int bakterie(int n,int arr[n], int poziom, int j)
{
    int suma = 0;
    if (arr[j] == 0)
    {
        suma = suma;
    }
    if (arr[j] == 1)
    {
        suma += poziom;
    }
    if (arr[j] == 2)
    {
        for (int m = 1;m<=4;m++)
        {
            kl++;
            suma+=bakterie(n,arr,poziom/4,kl);
        }
    }
    return suma;
}
int main() {
    int i=0,last_2=0,poziom=1;
    int arr[99999];
    char temp;
    do {
        scanf("%d%c", &arr[i], &temp);
        if (arr[i] == 2)
        {
            if(last_2<=4)
            {
                poziom = poziom*4;
            }
            last_2 = 0;
        }
        last_2++;
        i++;
    } while(temp != '\n');

    int n0 = bakterie(i,arr,poziom,0);
    if (n0 == 0)
    {
        printf("%d",0);
        printf("/");
        printf("%d",1);
        return 0;
    }
    int n1 = n0;
    int n3 = poziom;
    int n2 = n3;
    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("%d",n0/n1);
    printf("/");
    printf("%d",n3/n1);

    return 0;


  return 0;
}

关于arrays - 细菌数量玻璃覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77518395/

相关文章:

c++ - 为什么我不能访问 openCV 中的矩阵元素?

php - 从函数调用递归函数只返回第一个值

c - 以编程方式从/proc 读取所有进程状态

java - 如何在 Java 中递归地对节点中的项目求和?

java - 检查树是否完整的算法

C++冒泡排序返回奇怪的值

javascript - 函数出现轻微错误计算

具有最快 "Exists"查找的 C++ 容器( vector/数组/等)

C 快速将字符数组按字母顺序排序

c - 如何从包含动态创建字符串数组的结构中释放内存?