首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个算法作业问题:细胞矩阵扫描问题

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

Stack Overflow用户
提问于 2019-02-05 18:13:20
回答 2查看 89关注 0票数 0

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

输入:整数值N,a1,a2,….,aN,用空格隔开。

输出:一个整数等于想要的利润。

约束:对于每个ai,0

例如:

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

输出: 10

我把解决方案搞得一团糟。如果任何人有任何建议,我将非常感谢!

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

代码语言:javascript
运行
复制
#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)?

EN

回答 2

Stack Overflow用户

发布于 2019-02-05 19:29:04

在……里面

代码语言:javascript
运行
复制
for(i=0;i<n;i++)
{
   if(array[i] >= array[i+1])

当使用i == n-1时,您访问的array[n]不在数组中或未初始化

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

在不修改算法的情况下(坦率地说,我不理解它),你可以做的最小的改变是替换第二个

代码语言:javascript
运行
复制
for(i=0;i<n;i++)

通过

代码语言:javascript
运行
复制
for(i=0; i<(n-2); i++)

并替换为

代码语言:javascript
运行
复制
if(array[i+2] > array[i+3])

通过

代码语言:javascript
运行
复制
if(((i + 3) < n) && (array[i+2] > array[i+3]))

这很奇怪:

代码语言:javascript
运行
复制
if(scanf("%d",&n)){};

我鼓励你这样做:

代码语言:javascript
运行
复制
if ((scanf("%d",&n) != 1) || (n > 100) || (n <= 0)) {
  puts("invalid number of cells");
  return 0;
}

至于剩下的部分,我真的不明白你想要计算什么

票数 1
EN

Stack Overflow用户

发布于 2019-02-05 19:38:09

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

1 -2 -5 -40 -35 7

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

所以我的猜测是,除非你使用暴力,否则你无法计算“最大和”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54532023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档