• LETTers练习赛第十场 第二题


    矩阵连乘,直接暴力之。因为只要求保留两位小数,函数一定是收敛的。

    #include<iostream>
    using namespace std;
    double temp[105][105];
    double jiecheng(int n){//不想查阶乘的英文了。
    if(n==0)
    return 1;
    double ans=1;
    for(int i=1;i<=n;i++)
    ans*=i;
    return ans;
    }
    void Matrix_Muti(double mt[105][105],int n){
    int i,j,l,count;
    double m,save[105][105],di,ans[105][105];//数很大,double之
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++){
    temp[i][j]=mt[i][j];
    if(i==j)
    ans[i][j]=1+mt[i][j];//一开始就把单位矩阵和自己加到一起
    else
    ans[i][j]=mt[i][j];
    }
    for(count=2;count<=50;count++){//直接算到50次方
    di=jiecheng(count);
    for(i=1;i<=n;i++){ // i 代表行数
    for(l=1;l<=n;l++){// l 代表列数
    m=0;
    for(j=1;j<=n;j++)// j 代表该行或列的第几个。
           m+=mt[i][j]*temp[j][l];
    save[i][l]=m;
    }
    }
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++){
    mt[i][j]=save[i][j];
    ans[i][j]+=save[i][j]/di;
    }
    }
    for(i=1;i<=n;i++){
    for(j=1;j<=n;j++)
     printf("%.2lf ",ans[i][j]);//输出竟然是这个。
    printf("\n");
    }
    }
    int main(){
     double mt[105][105];
    int n;
    int i,j;
    while(scanf("%d",&n)&&n){
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    scanf("%lf",&mt[i][j]);
    Matrix_Muti(mt,n);
    }
    return 0;
    }
  • 相关阅读:
    ubuntu 16.04 连接无线网络
    linux的内存管理-抛砖引玉
    linux的进程调度-抛砖引玉
    AliOS Things 异步事件框架Yloop
    AliOS Things 云端物联网操作系统
    linux performance tools
    linux进程调度
    linux 内核Lockup机制浅析
    cache和内存屏障
    linux设备模型及实例
  • 原文地址:https://www.cnblogs.com/LETTers/p/2490556.html
Copyright © 2020-2023  润新知