传纸条 NOIP2008 c++编译错误求解决

2024-12-27 17:13:37
推荐回答(1个)
回答1:

#include
#include
#include
#include
using namespace std;
#define for_up(i,a,b) for(i=a;i<=b;i++)
#define for_down(i,a,b) for(i=a;i>=b;i--)
// 不能引用数组s,要传递指针
void change_max(int a[],int b[],int s[])
{
int c[40],i,j,x,t,len1,len2,len3,lens;
len1=a[0];len2=b[0];lens=s[0];
memset(c,0,sizeof(c));
for_up(i,1,len1)
{
x=0;
for_up(j,1,len2)
{
t=c[i+j-1]+a[i]*b[j];
c[i+j-1]=t % 10;
x=t / 10;
}
c[i+len2]+=x;
}
len3=len1+len2+(x>0);
if (len3>lens) {s[0]=len3; for_up(i,1,len3) s[i]=c[i]; return; }
if (len3 for_down(i,lens,1)
if (c[i]>s[i]) {for_up(i,1,len3) s[i]=c[i]; return; }
else if (c[i]}
int main()
{
// 数组 a 太大,无法运行
int n,m,i,j,k,t,a[41][41][7][40];
string s;
// 这里用换行是错误的,因为输入数值时必然要换行的。
cin>>n>>m;
cin>>s;
memset(a,0,sizeof(a));
for_up(i,1,n)
{
for_up(j,i,n)
{
a[i][j][0][0]=j-i+1;
// 这里的数组 s 用法错误
for_up(k,1,j-i+1) a[i][j][0][k]=s[i+k-1]-'0';
}
}
for_up(t,1,m)
for_up(i,1,n-1)
for_up(j,i+1,n)
{
// 数组 b 未定义,在程序中也无用,就注释掉了
//memset(b,0,sizeof(b));
for_up(k,i,j-1)
// 这里要传递第四维数组的首地址
change_max(&a[i][k][t-1][0],&a[k+1][j][t-1][0],&a[i][j][t][0]);
}
for_down(i,a[i][n][k][0],1)
printf("%d",a[1][n][k][i]);
return 0;
}