一个算法作业问题:细胞矩阵扫描问题

时间:2019-02-05 10:13:20

标签: c algorithm loops

说明:几个单元在一条直线上依次排列。在第i个单元中,写入给定的整数ai(i = 1,2,…,N)。我从左端的第一个单元格开始,然后向右移动;我可以选择跳到下一个单元格,或跳到下一个单元格的下一个单元格。每次进入单元格i时,我都必须支付| ai |如果ai为负,则为美元;如果ai为非负,则要接收ai美元。最多只能赚几美元?

输入:N,a1,a2,....,aN的整数值,以空格分隔。

输出:一个整数等于期望的利润。

约束:0

例如

输入:7 2 -1 3 –2 -1 6 -5

输出:10

我搞砸了解决方案。如果有人有任何建议,我将非常感谢!

这是我到目前为止得到的:

#include <stdio.h>


int main()
{
 int n,array[100];
 int i = 0;
 int sum = 0;


 if(scanf("%d",&n)){};
 for(i=0;i<n;i++){
    if(scanf("%d",&array[i])){}
 }

 for(i=0;i<n;i++)
 {
     if(array[i] >= array[i+1])
     {
        if(array[i+1] >= array[i+2])
        {
            if(array[i+2] > array[i+3])
            {
                sum += array[i+1];
                i++;
            }
            sum += array[i];
        }
        else if(array[i+1] < array[i+2])
        {
            if(array[i] >= array[i+2])
            {
                sum += array[i];
            }
            else if(array[i] < array[i+2])
            {
                sum += array[i+1];
                i++;
            }
        }
     }
     else if(array[i] < array[i+1])
     {
        if(array[i+1] < array[i+2])
        {
            if(array[i] < array[i+2])
            {
                sum += array[i+1];
                i++;
            }
            else if(array[i] >= array[i+2])
            {
                sum += array[i];
            }
        }
        else if(array[i+1] >= array[i+2])
        {
            sum += array[i];
        }
     }
 }

 printf("%d", sum);

 return 0;
}

在指令施加的约束内(可以跳到i和i + 1),数组中最大的数字总和是多少?

2 个答案:

答案 0 :(得分:1)

for(i=0;i<n;i++)
{
   if(array[i] >= array[i+1])

i == n-1您访问的array[n]不在数组或未初始化

访问array[i+2]array[i+3]时的类似问题

在不修改算法的情况下所做的最小更改(坦率地说,我不理解),就是替换第二个

for(i=0;i<n;i++)

作者

for(i=0; i<(n-2); i++)

并替换

if(array[i+2] > array[i+3])

作者

if(((i + 3) < n) && (array[i+2] > array[i+3]))

那很奇怪:

if(scanf("%d",&n)){};

我鼓励您做这样的事情:

if ((scanf("%d",&n) != 1) || (n > 100) || (n <= 0)) {
  puts("invalid number of cells");
  return 0;
}

对于其他情况,我不太了解您要计算的内容

答案 1 :(得分:0)

就我而言,计算机只能在下一个整数与第二个下一个整数之间进行决定,但是我们不知道此阶段的好选择是否会导致更糟的结果,例如,顺序可以是:

1 -2 -5 -40 -35 7

在这里,当计算机看到-2和-5时,它将选择-2并以-34结尾,这是最佳情况,而如果选择-5,则它可能以-32结尾。

所以我的猜测是,除非蛮力,否则您无法计算“最大和”。