矩阵乘法
来源:互联网 发布:python 每秒执行一次 编辑:程序博客网 时间:2024/04/27 22:10
老师布置的作业,已经上交了,贴出来,说不定能帮上忙
题目:就是用户输入A,输入二维关系R,得出关系矩阵
里面涉及一个矩阵的任意次连乘,很有用
using System;
namespace 考试
...{
/**//// <summary>
/// 考试题,求R的N次幂
/// </summary>
class test
...{
[STAThread]
static void Main(string[] args)
...{
//A是全集
string[] A;
//R是二元关系
string[,] R;
string[] strR;
//strM是字符矩阵,M是数字矩阵
int[,] M;
int[,] MS;
int[,] MD;
string[,] strM;
//M1是临时矩阵
string[,] M1;
//M2是临时矩阵
string[,] M2;
int b;
//power是幂的次数
int power;
Console.WriteLine("请输入A的大小:");
//得到A的大小
A=new string[int.Parse(Console.ReadLine())];
//得到M,M1,M2的大小
M=new int[A.Length,A.Length];
MS=new int[A.Length,A.Length];
MD=new int[A.Length,A.Length];
strM=new string[A.Length,A.Length];
M1=new string[A.Length,A.Length];
M2=new string[A.Length,A.Length];
//得到A的值
for(int i=0;i<A.Length;i++)
...{
Console.WriteLine("请输入第"+(i+1)+"个元素:");
A[i]=Console.ReadLine();
}
Console.WriteLine("请输入R中元素的个数(单位:组)");
//得到R的行数
b=int.Parse(Console.ReadLine());
R=new string[b,2];
strR=new string[b];
//得到R的值
for(int i=0;i<b;i++)
...{
for(int j=0;j<2;j++)
...{
Console.WriteLine("请输入第"+(i+1)+"组第"+(j+1)+"值");
R[i,j]=Console.ReadLine();
}
}
//得到幂的次数
Console.WriteLine("请输入你要计算的幂的次数:");
power=int.Parse(Console.ReadLine());
//得到A×A的矩阵
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
M1[i,j]=A[i];
}
}
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
M2[i,j]=A[j];
}
}
//合并m1,m2
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
strM[i,j]=M1[i,j]+M2[i,j]+"";
}
}
//合并r
for(int i=0;i<b;i++)
...{
strR[i]=R[i,0]+R[i,1];
}
//得到M的值
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
foreach(string s in strR)
...{
if(s.Equals(strM[i,j]))
...{
M[i,j]=1;
}
}
}
}
//copy一份M的值,为以后求乘法的时候做准备
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
MS[i,j]=M[i,j];
}
}
//h求累加值
int h;
//当求一次幂的时候
if(power==1)
...{
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
Console.Write(M[i,j]+" ");
}
Console.WriteLine();
}
}
//求多次幂的时候
else
...{
//w控制幂的次数
for(int w=1;w<power;w++)
...{
//i控制行
for(int i=0;i<A.Length;i++)
...{
//j控制列
for(int j=0;j<A.Length;j++)
...{
h=0;
//k用来控制列的移动
for(int k=0;k<A.Length;k++)
...{
h+=MS[i,k]*M[k,j];
}
MD[i,j]=h;
}
}
//改变下一次循环时MS的值,与递归类似.
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
MS[i,j]=MD[i,j];
}
}
}
}
//输出
Console.WriteLine("结果为:");
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
Console.Write(MD[i,j]+" ");
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
namespace 考试
...{
/**//// <summary>
/// 考试题,求R的N次幂
/// </summary>
class test
...{
[STAThread]
static void Main(string[] args)
...{
//A是全集
string[] A;
//R是二元关系
string[,] R;
string[] strR;
//strM是字符矩阵,M是数字矩阵
int[,] M;
int[,] MS;
int[,] MD;
string[,] strM;
//M1是临时矩阵
string[,] M1;
//M2是临时矩阵
string[,] M2;
int b;
//power是幂的次数
int power;
Console.WriteLine("请输入A的大小:");
//得到A的大小
A=new string[int.Parse(Console.ReadLine())];
//得到M,M1,M2的大小
M=new int[A.Length,A.Length];
MS=new int[A.Length,A.Length];
MD=new int[A.Length,A.Length];
strM=new string[A.Length,A.Length];
M1=new string[A.Length,A.Length];
M2=new string[A.Length,A.Length];
//得到A的值
for(int i=0;i<A.Length;i++)
...{
Console.WriteLine("请输入第"+(i+1)+"个元素:");
A[i]=Console.ReadLine();
}
Console.WriteLine("请输入R中元素的个数(单位:组)");
//得到R的行数
b=int.Parse(Console.ReadLine());
R=new string[b,2];
strR=new string[b];
//得到R的值
for(int i=0;i<b;i++)
...{
for(int j=0;j<2;j++)
...{
Console.WriteLine("请输入第"+(i+1)+"组第"+(j+1)+"值");
R[i,j]=Console.ReadLine();
}
}
//得到幂的次数
Console.WriteLine("请输入你要计算的幂的次数:");
power=int.Parse(Console.ReadLine());
//得到A×A的矩阵
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
M1[i,j]=A[i];
}
}
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
M2[i,j]=A[j];
}
}
//合并m1,m2
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
strM[i,j]=M1[i,j]+M2[i,j]+"";
}
}
//合并r
for(int i=0;i<b;i++)
...{
strR[i]=R[i,0]+R[i,1];
}
//得到M的值
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
foreach(string s in strR)
...{
if(s.Equals(strM[i,j]))
...{
M[i,j]=1;
}
}
}
}
//copy一份M的值,为以后求乘法的时候做准备
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
MS[i,j]=M[i,j];
}
}
//h求累加值
int h;
//当求一次幂的时候
if(power==1)
...{
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
Console.Write(M[i,j]+" ");
}
Console.WriteLine();
}
}
//求多次幂的时候
else
...{
//w控制幂的次数
for(int w=1;w<power;w++)
...{
//i控制行
for(int i=0;i<A.Length;i++)
...{
//j控制列
for(int j=0;j<A.Length;j++)
...{
h=0;
//k用来控制列的移动
for(int k=0;k<A.Length;k++)
...{
h+=MS[i,k]*M[k,j];
}
MD[i,j]=h;
}
}
//改变下一次循环时MS的值,与递归类似.
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
MS[i,j]=MD[i,j];
}
}
}
}
//输出
Console.WriteLine("结果为:");
for(int i=0;i<A.Length;i++)
...{
for(int j=0;j<A.Length;j++)
...{
Console.Write(MD[i,j]+" ");
}
Console.WriteLine();
}
Console.ReadLine();
}
}
}
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 用函数统计字符串的单词个数 空格数 字母数
- 关于开放CWSS群组通知
- 矩阵的乘法问题
- ubuntu初体验
- 翻译(一)SharePoint 2007管理入门:Windows SharePoint Service 3.0 and Microsoft Office SharePoint Server 2007
- 矩阵乘法
- KMP算法
- webBrowser控制新窗口
- Linux那些事儿之我是UHCI(29)FSBR
- Linux那些事儿之我是UHCI(大结局)"脱"就一个字
- Proxool Provider unable to load JAXP configurator file: proxool.xml
- ACE研读笔记之五-循环式日志服务器
- 配置连接池
- php编程常见问题