问题遇到的现象和发生背景
使用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;
}
运行结果及报错内容
我的解答思路和尝试过的方法
试着把数组a化成了其他数组,发现答案在变,但是都不对
搜了下没有找到解决方法,请求解答
我想要达到的结果
我想不要覆盖就行