m0_58108618 2022-09-26 23:23 采纳率: 100%
浏览 19
已结题

关于#c++#的数组自动覆盖问题,如何解决?

问题遇到的现象和发生背景

使用vs code搭建的c++环境写算法题时,发现给一个数组赋值,他会覆盖掉之前其他的数组里的值
输入数据为“6 4 253187”

用代码块功能插入代码,请勿粘贴截图

//求最大k乘积问题
 #include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;

int main ()
{
    int i, k, o, m;
    int luji = 0;
    int jilu = 1;
    int c, c1;
    c = c1 = 0;
    cin >> i >> k;
    int dp[i+1][k+1];//i是一共有多少数,k是一共要分成多少段
    int a[k],b[i + 1];//这里的所有数组都是从1开始有效
    //a除外
    for (int opop = 0; opop < k;opop++)//初始化
    {
        a[opop] = 0;
    }
        cin >> o;
    int oo = o;
    for (int i1 = 0; i1 < i + 1; i1++)//初始化全部置零
    {
        for (int j1 = 0; j1 < k + 1; j1++)
            dp[i1][j1] = 0;
    }
    for (int i1 = 0; i1 < i  ;i1++,o /= 10)//将每位数放在b[i]里面
    {
        b[i-i1] = o % 10;
    }
    
    for (int i1 = 0; i1 < i + 1; i1++)//初始化
    {
        dp[i1][0] = 0;
    }
    for (int i1 = 0; i1 < k + 1; i1++)//初始化
    {
        dp[0][i1] = 0;
    }
    
    for (int i1 = 1; i1 <= i; i1++)
        {
            for (int j = 1; j <= k; j++)
            {
                //打算从前往后分
                
                    //dp[i1][j] = 1000;

                if(j > 1)
                {
                c = c1 = 0;
                for (int l = 1; l < i1; l++) //假设的分段的地方
                {
                    m = 0;
                    for (int i2 = 0; i2 < l; i2++) // m是记录前半段的数
                    {
                        m += *(b + i1 - i2 ) * pow(10, i2);
                    }

                    if (m == 0)
                        m = 1;
                    c = dp[i1 - l ][j - 1] * m; //乘以分段的那部分
                    /*if(i1==4&&j==2)
                        cout << c << ' ';*/
                    if (c > c1)
                        {
                            c1 = c;
                            cout << "此时的a[luji]=" << a[luji] << endl;
                            cout << "此时的dp[0][0]=" << dp[0][0] << endl;
                            a[luji] = i1 - l + 1;
                            if(dp[0][0]!=0)
                            {
                                cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
                                cout << "赋值后的的a[luji]=" << a[luji] << endl;
                                cout << "赋值后的dp[0][0]=" << dp[0][0] << endl;
                                cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
                            }
                            luji++; 
                        }
                    }
                }
                else
                if(j==1)
                {
                    c1 = oo / pow(10, (i - i1));
                    
                }
                    dp[i1][j] = c1;
                    cout <<i1<<"行"<<j<<"列"<< dp[i1][j] << endl;
                
            }
        }

        for (int i1 = 0; i1 <= i;i1++)
        {
            for (int j1 = 0; j1 <= k; j1++)
            {
                cout << dp[i1][j1] << ' ';
            }
            cout << endl;
        }
            cout << dp[i][k] << endl;
        luji = 0;
        //cout << a[0] << ' ' << a[1];
        for (int op = 1; op <= i; op++)
        {
            
            if(a[luji]==0&&luji<k-1)
            {
                luji++;
                cout << ' ';
                cout << b[op];
            }
            else
            {
            if(luji == k-1)
            {
                cout << b[op];
                continue;
            }
            
                cout << b[op];
                a[luji]--;
            
            }  
        }

            system("Pause"); // vs code不用这个终端会自动关闭
        return 0;
 }
运行结果及报错内容

img

img

我的解答思路和尝试过的方法

试着把数组a化成了其他数组,发现答案在变,但是都不对
搜了下没有找到解决方法,请求解答

我想要达到的结果

我想不要覆盖就行

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-09-27 09:13
    关注

    动态数组需要使用new

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月19日
  • 已采纳回答 10月11日
  • 修改了问题 9月26日
  • 修改了问题 9月26日
  • 展开全部

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分