0

我有一个如下所示的数组([2][10] 大小):

5 | 13 | 12 | 2 | 7 | 12 | 3 | 1 | 4 | 5
1 | 10 | 5 | 1 | 14| 6 | 4 | 1 | 7 | 2
4 | 9 | 17 | 5 | 6 | 2 | 7 | 21 | 8 | 1

用户将输入一个数字,代码将计算连续数字的总和,并将返回起始行和列。

例如:输入 = 48,返回行 = 1,列 = 1
输入 = 36,返回行 = 2,列 = 6

我的示例代码只返回“完成”而不是行 = 0,列 = 1。怎么了?

int sum;
int column;
int row;
bool situ = false;
int number = 12;
int puzzle[] = { (4,6,5,1,2), (3,5,6,7,8) };

for(int i=0; i<2; i++)
{
    sum = 0;
    for(int j=0; j<6; j++)
    {
        sum = 0;
        for(int k=j; k<6; k++)
        {
            sum += puzzle[j];
            if( number == sum && !situ)
            {
                row = i;
                column = k;
                cout << "row = " << i << endl;
                cout << "column = " << j << endl;

            }
            if( !situ)
                break;
        }
        if( !situ)
            break;
    }
    if( !situ)
        break;
}
cout << "finished";
4

2 回答 2

2

您的

if( !situ)
    break;

陈述是一个问题。您初始化situfalse永远不会更改它。因此,您总是在第一个循环之后中断。

于 2012-10-29T00:54:56.413 回答
0
    #include<iostream>

using namespace std;
int main()
{
int sum;
int column;
int row;
bool situ = false;
int number = 12;
int puzzle[2][10] = { {4,6,5,1,2}, {3,5,6,7,8} };

for(int i=0; i<2; i++)
{
    sum = 0;
    for(int j=0; j<5; j++)
    {
        sum = 0;
        for(int k=j; k<5; k++)
        {
            sum += puzzle[i][k];
            if( number == sum && !situ)
            {
                row = i;
                column = k;
                cout << "row = " << i << endl;
                cout << "column = " << j << endl;

            }
     //       if( !situ)
    //            break;
        }
 //       if( !situ)
//            break;
    }
 //   if( !situ)
//        break;
}

cout << "finished";
}enter code here
于 2015-10-25T08:48:50.373 回答