Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
4年前关闭。
我正在尝试创建一个名为boulders的函数
基本上,我应该用巨石和空气填充数组,其中巨石用'o'表示,空气用'-'表示。它应该充满随机数的巨石,最后它必须遵循重力法则。
例如:
到目前为止,我已经用随机的巨石和空气填充了它,但是我正在努力使它遵循重力规则。
到目前为止,这是我的代码:
输出:
L_WIDTH定义为80以供参考
不是执行此操作的代码。条件必须是,我处于巨石位置,并且下方的位置有空气。然后,只有到那时,您才能将粗体定位在应该为空的粗体下,然后使粗体为空。最终结果是,粗体下降了一位。
迭代从最下面的一行开始开始,然后逐步向上的事实是正确的。但是,这没有考虑到巨石可能必须掉落多个空间(如果说在其下方有2个空气空间)。
这可以通过许多方式解决。您可能需要放置一会儿条件。
我故意不给您解决方案。只是一些提示。
因此,您可以制定自己的解决方案。
有比这更有效的解决方案。因为实际上巨石将始终从下往上生长。计算一列中的巨石数量足以快速到达最终布局。甚至更好的是,您甚至可以按每列随机分配该列中应有多少个巨石。
这将很快产生解决方案。
我遵循了您的代码并给出了一些提示,但是,如果您阅读以上文字,则可以提出更好的算法。同样,我故意不提供解决方案。您应该可以自己解决。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
4年前关闭。
我正在尝试创建一个名为boulders的函数
void boulders (char landscapes[][L_WIDTH], int nrows);
基本上,我应该用巨石和空气填充数组,其中巨石用'o'表示,空气用'-'表示。它应该充满随机数的巨石,最后它必须遵循重力法则。
例如:
--------------O---------
---O----------O-----O---
---OO------O--OO----OO--
---OO-----OOOOOO---OOO--
--OOOO---OOOOOOOO-OOOOO-
到目前为止,我已经用随机的巨石和空气填充了它,但是我正在努力使它遵循重力规则。
到目前为止,这是我的代码:
void boulders (char landscape[][L_WIDTH], int nrows) {
srand(time(NULL));
int i, j;//populate with -
for (i=0; i<nrows; i++) {
for (j=0; j<L_WIDTH; j++) {
landscape[i][j] = '-';
}
}
int boulders;//random population of o
for (i=0; i<nrows; i++) {
boulders = rand() % L_WIDTH;
for (j=0; j<boulders; j++) {
landscape[rand()%(nrows)][rand()%L_WIDTH] = 'o';
}
}
//follow gravitational rules
for (i=nrows-1; i<0; i--) {
for (j=0; j<L_WIDTH; j++) {
if (landscape[i-1][j] == 'o') {
landscape[i][j] = 'o';
}
}
}
//print
for (i=0; i<nrows; i++) {
for (j=0; j<L_WIDTH; j++) {
printf("%c", landscape[i][j]);
}
printf("\n");
}
}
main () {
char landscape[6][L_WIDTH];
boulders (landscape, 6);
}
输出:
L_WIDTH定义为80以供参考
最佳答案
您需要检查巨石下是否有空气。
if (landscape[i-1][j] == 'o') {
landscape[i][j] = 'o';
}
不是执行此操作的代码。条件必须是,我处于巨石位置,并且下方的位置有空气。然后,只有到那时,您才能将粗体定位在应该为空的粗体下,然后使粗体为空。最终结果是,粗体下降了一位。
迭代从最下面的一行开始开始,然后逐步向上的事实是正确的。但是,这没有考虑到巨石可能必须掉落多个空间(如果说在其下方有2个空气空间)。
这可以通过许多方式解决。您可能需要放置一会儿条件。
int boulderdropped = 1;
while(boulderdropped==1){
boulderdropped = 0;
//do your iteration and if you detect air under a boulder
//set boulderdropped to 1 again.
}
我故意不给您解决方案。只是一些提示。
因此,您可以制定自己的解决方案。
有比这更有效的解决方案。因为实际上巨石将始终从下往上生长。计算一列中的巨石数量足以快速到达最终布局。甚至更好的是,您甚至可以按每列随机分配该列中应有多少个巨石。
这将很快产生解决方案。
我遵循了您的代码并给出了一些提示,但是,如果您阅读以上文字,则可以提出更好的算法。同样,我故意不提供解决方案。您应该可以自己解决。
关于c - C中的“巨石”功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29570659/
10-11 19:42