”上三角“行列式源代码(改良版,添加了几种特殊情况的特殊处理)

#include<iostream.h>
#include<fstream.h>
#include<cmath>
void
main()
{
 //输入行列式开始
 int
n,i,j,a[20][20],T[20],max[20],b[20],k,q,p,f=2,u=0;
 float
t[20][20],c,sum=1,w[20];
 cout<<"阶数:";
 cin>>n;
 ifstream  
infile; //定义输入文件类
    ofstream   outfile;
//定义输出文件类
    infile.open("D:\\考试题目.txt");
//打开一个输入文件“考试题目.txt”
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=n;j++)
  {
   
infile>>a[i][j];//将“考试题目.txt”中的十个整型数输入到a[i]中
  }
 }
 infile.close();//关闭输入文件
 //输入行列式阶数
 for(j=1;j<=n;j++)//从第一列开始找起
 {
  T[j]=0;     
//将计数器初始化为0
  for(i=1;i<=n;i++)
  {
   if(a[i][j]==0)//在j列中每找到一个0就计数
   {
    T[j]++;//统计第j列中0的个数
   }
  }
 }
 outfile.open("D:\\答案.txt");
//打开一个输出文件“答案.txt”
 //此循环结束后已经将每列的0的个数存储到数组T[j]中
 //开始比较每列0的个数并排列
 for(i=1;i<=n;i++)//经过n次循环将T[j]从大到小排列
 {
  max[i]=-100;
  for(j=1;j<=n;j++)
  {
   max[i]=(max[i]>T[j])?max[i]:T[j];
  }
  //找出第i个最大值
  for(j=1;j<=n;j++)//通过一个循环找到第i个最大值对应的列数j
j是对应的列数
  {
   if(max[i]==T[j])
   {
    T[j]=-200;//将T[j]设为较小的数
    //outfile<<"第"<<j<<"列:"<<max[i]<<"个0"<<endl;
    
    b[i]=j;
    break;
   }
  }
 }
 outfile<<"------------------------------------行列式答案-------------------------------------"<<endl;
 //打印新的行列式
   
outfile<<"第1步:换列:"<<endl;
 for(i=1;i<=n;i++)
 {
  for(j=1;j<=n;j++)
  {
   t[i][j]=float(a[i][b[j]]);
   //判断换列次数
   if(i==1&&j!=b[j])
   {
    u++;
   }
   outfile<<t[i][j]<<"
";
  }
  outfile<<endl;
 }
 //判断第一个数是0的特殊情况的解决办法
 if(t[1][1]==0)
 {
  for(i=2;i<=n;i++)
  {
   if(t[i][1]!=0)
   {
    for(j=1;j<=n;j++)
    {
     w[j]=t[i][j];
     t[i][j]=t[1][j];
     t[1][j]=w[j];
    }
    break;
   }
  }
  u++;
 }
 //换列结束,将新的行列式重新存储在一个新的数组中t[][]
 for(j=1;j<n;j++)//列
 {
  for(k=j+1;k<=n;k++)//j列需化为0的行
  {
   if(t[k][j]!=0)
   {
    for(i=j;i<=n;i++)//行
    {
     if(t[i][j]!=0&&i!=k)
     {
      p=0;
      c=float(t[k][j]/t[i][j]);
      for(q=1;q<=n;q++)//列
      {
       t[k][q]=t[k][q]-c*t[i][q];
       if(abs(t[k][q])<0.0001&&k!=q)
       {
        t[k][q]=0;
       }
       p++;
      }
      //打印中间过程
      outfile<<"第"<<f++<<"步:r["<<k<<"]-"<<c<<"r["<<i<<"]:"<<endl;
      for(int
s=1;s<=n;s++)
      {
       for(int
d=1;d<=n;d++)
       {
        outfile<<t[s][d]<<"
";
       }
       outfile<<endl;
      }
      if(p==n)
      {
       break;
      }
     }
    }
   }
  }
 }
 for(i=1;i<=n;i++)
 {
  sum=t[i][i]*sum;
 }
   
outfile<<"第"<<f++<<"步:"<<endl;
 if(u!=0)
 {
  u=u-1;
 }
 outfile<<"该行列式最终结果="<<sum*pow(-1,u)<<endl;
 outfile.close();//关闭输出文件

}

时间: 2024-11-02 23:25:19

”上三角“行列式源代码(改良版,添加了几种特殊情况的特殊处理)的相关文章

方阵求值——上三角行列式、定义(康拓展开求值)

Problem:求方阵A的值. 设求n*n的矩阵:加法的操作次数为P(n),乘法的操作次数与为M(n). 对于方法1: j1~jn共有n!种选法:j1有n种选法,j2有n-1种选法,-,jn有1种选法. P(n)=n!-1 M(n)=n!*(n-1) 对于方法2: P(1)=0 P(2)=2 P(n)=(n-1)+n*P(n-1)=(n-1)+(n-2)+n*(n-1)*P(n-2)=-=(n-1)+(n-2)+-+2+n*(n-1)*-*3*P(2) =(n+1)*(n-2)/2+n!    

判断上三角行列式

题目:7-2[基础编程题_随堂练习3][习题7-三-3][必须用二维数组] 判断上三角矩阵 (15分) 上三角矩阵指主对角线以下的元素都为0的矩阵:主对角线为从矩阵的左上角至右下角的连线. 本题要求编写程序,判断一个给定的方阵是否上三角矩阵. 输入格式: 输入第一行给出一个正整数T,为待测矩阵的个数.接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n.随后n行,每行给出n个整数,其间以空格分隔. 输出格式: 每个矩阵的判断结果占一行.如果输入的矩阵是上三角矩阵,输出"YE

windows全系列激活脚本-改良版

@ECHO OFFTITLE Windows 全版本系统激活cscript //nologo %Systemroot%\system32\slmgr.vbs -skms 10.1.1.12ECHO 检测激活...cscript //nologo %Systemroot%\system32\slmgr.vbs -atocscript //nologo %Systemroot%\system32\slmgr.vbs -dlvPAUSE 新建文本文档将上面的代码复制过去保存为windows全系列激活脚

office全系列激活脚本-改良版

@ECHO OFFTITLE office 全版本系统激活@echo offfor /l %%a in (8,1,16) do (for /f "tokens=*" %%i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Office\%%a.0\Word\Options" /v "PROGRAMDIR"') do (if not "%%i"==""

pta 又来一个上三角数字三角形

一道简单题,可是,因为格式错误的原因,我居然花了半个小时的时间! 题目: 输入一个正整数n,输出具有n层的上三角数字三角形. 输入格式: 只有一个正整数n,1<=n<=100. 输出格式: 一个上三角数字三角形,每个数字占四个字符位置. 输入样例: 5 输出样例: 1   6  10  13  15 2   7  11  14 3   8  12 4   9 5 一开始我的代码是这个样子的: #include <stdio.h> int main() { int n,i,j,k=1

IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果

拖个button继承一下  几行代码 就搞定 自用效果还行 IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果,布布扣,bubuko.com

CodeProject网站上的有效源代码

关于异步socket的代码,使用的是http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs(v=vs.110).aspx微软官方的资料,不是很清楚 http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod CodeProject网站上的有效源代码,布布扣,bubuko

fusionchart实现ZoomLine 源代码 破解版 可以导出

最近画油量曲线需要用到ZoomLine官网看了好几天,现在整理出来供大家参考使用 zoomline.html源代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /

Uva 11468 改良版AC自动机

改良版AC自动机 UVa 11468 题意:给一些字符和各自出现的概率,在其中随机选择L次,形成长度为L的字符串S,给定K个模板串,求S不包含任意一个串的概率. 首先介绍改良版的AC自动机: 传统的AC自动机,是当一个字符失配时,根据失配函数转移到指定地方,而这个失配函数,是通过一个宽搜的过程形成的,这时在匹配串的时候,就当匹配失败时,顺着失配指针走,直到可以匹配.然后匹配到单词结点,或者后缀链接是一个单词结点,这些前面的结点也是匹配单词.这就是传统的AC自动机. 现在将这个AC自动机改版优化: