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