0

プログラムがクラッシュし続けます。コードは合法で正しいようです。何が問題なのかしら。

#include <stdio.h>

void queue(int length,int turns){
    int permutations,totalTurns;
    turns++;
    if (length>0){
        queue(length-1,turns);
        if (length>1){
            queue(length-2,turns);
        }
    } 
    else{
        permutations++;
        totalTurns+=turns;
    }
}

int main() 
{
    while(true){
        int length;
        float average;
        int permutations=0;
        int totalTurns=0;

        printf("Queue length: ");
        scanf("%d", &length);
        queue(length,-1);
        average=totalTurns/permutations;
        printf("The average turns are %f", average);
    }
}
4

2 に答える 2

7
    int permutations=0;

    average=totalTurns/permutations;

あなたはゼロで割っています。

permutationsで宣言した変数は、 の変数とmain()は異なることに注意してくださいqueue()

おそらく、次のようにpermutationsから値を返す必要があります。queue()

int queue(int length,int turns){
    int permutations = 0;
    ...
    return permutations;
}

int main(void) {
    ...
    int permutations = queue(length,-1);
}
于 2012-12-13T15:56:43.210 に答える
2

順列をグローバル変数として宣言する必要があります。つまり、main 関数と totalTurns の外側で宣言する必要があります。これは、他の人が述べたように、関数キューで宣言したとしても、その外側で忘れられているため、常に 0 であるためです。

#include <stdio.h>

static int permutations=0;
static int totalTurns=0;


void queue(int length,int turns){
    turns++;
    if (length>0){
        queue(length-1,turns);
        if (length>1){
            queue(length-2,turns);
        }
    } 
    else{
        permutations++;
        totalTurns+=turns;
    }
}

int main() 
{
    while(true){
        int length;
        float average;
        int totalTurns=0;

        printf("Queue length: ");
        scanf("%d", &length);
        queue(length,-1);
        average=totalTurns/permutations;
        printf("The average turns are %f", average);
    }
}
于 2012-12-13T15:59:36.847 に答える