📄 陈慧-5分.txt
字号:
/*矩阵特征值问题*/
/*本程序在vc++6.0上运行通过,并用 cl.exe 编译通过*/
#include<fstream.h>
#include<stdlib.h>
void readfile(int&,int*&);
void fpshuzhu(int,int**&);
void matrix(int*,int,int**&);
int max(int,int,int);
int main()
{
int n;//矩阵个数
int *p;//矩阵维数
int **m;//数组,存储最大特征值
readfile(n,p);//从input.txt中读取各个值
fpshuzhu(n,m);//分配数组m
matrix(p,n,m);//计算数组m的各个值
ofstream out("output.txt");
out<<m[1][n];//将最大特征值输出到文件
out.close();
delete[] p;//释放数组p所占内存
for(int i=0;i<n+1;i++)//释放数组m所占内存
delete[] m[i];
delete[] m;
return 0;
}
void readfile(int& n,int*& p)
{
int i;//循环控制变量
ifstream fin("input.txt",ios::nocreate);//打开输入文件
if(!fin)
{
cerr<<"文件不存在!";
exit(-1);
}
fin>>n;//读出n
if(!(p=new int[n+1]))
{
cerr<<"内存分配失败!"<<endl;
exit(-1);
}
for(i=0;i<=n;i++)//读出维数p
fin>>p[i];
fin.close();//关闭输入文件
}
void fpshuzhu(int n,int**& m)
{
if(!(m=new int*[n+1]))//为数组m分配空间
{
cerr<<"内存分配失败!"<<endl;//分配不成功,退出
exit(-1);
}
for(int i=0;i<n+1;i++)
if(!(m[i]=new int[n+1]))//为每个一维数组分配空间
{
cerr<<"内存分配失败!"<<endl;//分配不成功,退出
delete[] m;
exit(-1);
}
}
void matrix(int* p,int n,int**& m)
{
int i,r,k;//循环控制变量
for(i=1;i<=n;i++) m[i][i]=0;
for(r=2;r<=n;r++)
for(i=1;i<=n-r+1;i++)
{
int j=i+r-1;
m[i][j]=m[i+1][j]+3*max(p[i-1],p[i],p[j])-p[i-1]-p[i]-p[j];//求得在第一个矩阵处断开的特征值
for(k=i+1;k<j;k++)//考虑在其他处断开
{
int t=m[i][k]+m[k+1][j]+3*max(p[i-1],p[k],p[j])-p[i-1]-p[k]-p[j];//求得此时的特征值
if(t>m[i][j]) m[i][j]=t;//取较大值
}
}
}
int max(int a,int b,int c)//取三个整数的最大值
{
int temp;
temp=a>b?a:b;
temp=temp>c?temp:c;
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -