0

助けが必要です。C++最終的に渡されたランダムな文字列を受け取り、文字列内のすべてのポイントでブレークを実行し、ブレークの左右の色の数をカウントするコードを書いています(r, b 、および w)。これがキャッチです。これは、壊れたとき、または強いパスが最終的にハイブリッドになるときのwいずれrかです。b私の問題は、ブレークが実装されていて、すぐに左または右にプログラムが拳またはwを見つけることができない場合です。誰でも私を助けることができますか?br

#include <stdio.h>
#include "P2Library.h"

void doubleNecklace(char neck[], char doubleNeck[], int size);
int findMaxBeads(char neck2[], int size);
#define SIZE 7

void main(void)
{
    char necklace[SIZE];
    char necklace2[2 * SIZE];
    int brk;
    int maxBeads;
    int leftI, rightI, leftCount = 0, rightCount=0, totalCount, maxCount = 0;
    char leftColor, rightColor;
    initNecklace(necklace, SIZE);

    doubleNecklace(necklace, necklace2, SIZE);
    maxBeads = findMaxBeads(necklace2, SIZE * 2);
    checkAnswer(necklace, SIZE, maxBeads);

    printf("The max number of beads is %d\n", maxBeads);
}

int findMaxBeads(char neck2[], int size)
{
    int brk;
    int maxBeads;
    int leftI, rightI, leftCount = 0, rightCount=0, totalCount, maxCount = 0;
    char leftColor, rightColor;

    for(brk = 0; brk < 2 * SIZE - 1; brk++)
    {
        leftCount = rightCount = 0;
        rightI = brk;
        rightColor = neck2[rightI];

        if(rightI == 'w')
        {
            while(rightI == 'w')
            {
                rightI++;
            }
            rightColor = neck2[rightI];
        }
        rightI = brk;

        while(neck2[rightI] == rightColor || neck2[rightI] == 'w')
        {
            rightCount++;
            rightI++;
        }

        if(brk > 0)
        {
            leftI = brk - 1;
            leftColor = neck2[leftI];

            if(leftI == 'w')
            {
                while(leftI == 'w')
                {
                    leftI--;
                }
                leftColor = neck2[leftI];
            }
            leftI = brk - 1;

            while(leftI >= 0 && neck2[leftI] == leftColor || neck2[leftI] == 'w')
            {
                leftCount++;
                leftI--;
            }
        }
        totalCount = leftCount + rightCount;
        if(totalCount > maxCount)
        {
            maxCount = totalCount;
        }
    }
    return maxCount;
}

void doubleNecklace(char neck[], char doubleNeck[], int size)
{
    int i;
    for(i = 0; i < size; i++)
    {
        doubleNeck[i] = neck[i];
        doubleNeck[i+size] = neck[i];
    }
}
4

1 に答える 1

0

コードを詳しく調べたわけではありませんが、何かが対称的ではありません。forループでは、「左」のコードには がありますifが、「右」のコードにはありません。-1おそらく、条件でそれを削除し、「正しい」コードforとして追加する必要があります。if

for(brk = 0; brk < 2 * SIZE; brk++)
{
    leftCount = rightCount = 0;

    if (brk < 2 * SIZE - 1)
    {
        rightI = brk;
        rightColor = neck2[rightI];

        //...
    }

    if(brk > 0)
    {
        leftI = brk - 1;
        leftColor = neck2[leftI];

        //...
    }

    //...

推測ですが... :-/

たぶん、それら<を変更する必要があります<=

于 2013-03-08T07:38:37.607 に答える