一个 Int 类型 矩阵T[k ,n]:
例如:
T11      T12......T1n-1        T1n    
T21      T22......T2n-1        T2n
..       ..        ..           ..
Tk1      Tk2......Tkn-1        Tkn另一个 Datetime 类型 矩阵D[k],D1       
D2
..
Dk
        
例如:
2008-5-21 
2008-6-14          
2008-4-23 我想要达到的目的:           En[k] = D[k]- [T1n,T2n,T3n...Tkn]
              利用上式求   En-1[k] =  En[k]-[T1n-1,T2n-1,T3n-1...Tkn-1]
最后把 En[k]、En-1[k]...E1[k]  组合 得出一个 Datetime 类型 矩阵 E[k,n]研究好久没研究出来~~~望XDJMM给出代码
请写出代码~~~谢谢

解决方案 »

  1.   

    一个 Int 类型 矩阵T[k ,n]:
    例如:
    1        2        3         4
    8        4        5         5
    9        7        1         3另一个 Datetime 类型 矩阵D[k],   
    例如: 
    2008-5-21 
    2008-6-14          
    2008-4-23 我想要达到的目的:用矩阵D 减 矩阵T中的最后一列,得到的结果 再减去 矩阵T 中的倒数第二列  如此直道矩阵T的第一列,例如:
    2008-5-21             4                2008-5-17                   3           2008-5-14
    2008-6-14   减去       5    等于         2008-6-9      再减去          5   等于      2008-6-4 
    2008-4-23             3                2008-4-20                   1           2008-4-19一直到矩阵T第一列最后,把得到的时间值 组成 一个 二维矩阵 E[,]
    例如:           倒数第二列           最后一列
      ......2008-5-17          2008-5-14
      ......2008-6-9            2008-6-4 
      ..... 2008-4-20          2008-4-19
      

  2.   


            static void Main(string[] args)
            {
                int[,] a = { { 1, 2, 3, 4 }, { 8, 4, 5, 5 }, { 9, 7, 1, 3 } };
                DateTime[] b = { DateTime.Parse("2008-5-21"), DateTime.Parse("2008-6-14"), DateTime.Parse("2008-4-23") };
                DateTime[,] d = GetDateTime(a, b);
                IEnumerator ie = d.GetEnumerator();
                for (int i = 0; i < 3; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        if (j == 3)
                            Console.WriteLine(d[i, j].ToShortDateString());
                        else
                            Console.Write(d[i, j].ToShortDateString() + " ");
                    }
                }
            }        static DateTime[,] GetDateTime(int[,] T, DateTime[] D)
            {
                DateTime[,] d = new DateTime[T.GetUpperBound(0)+1,T.GetUpperBound(1)+1];
                if (D.LongLength != T.GetUpperBound(0) + 1)
                    return null;
                else
                {
                    for (int i = 0; i < T.GetUpperBound(0) + 1; i++)
                    {
                        for (int j = 0; j < T.GetUpperBound(1) + 1; j++)
                        {
                            if (j == 0)
                                d[i, j] = D[i].AddDays(-T[i, T.GetUpperBound(1) - j]);
                            else
                                d[i, j] = d[i, j - 1].AddDays(-T[i, T.GetUpperBound(1) - j]);
                        }
                    }
                    return d;
                }
            }
    输出结果为
    2008-5-17 2008-5-14 2008-5-12 2008-5-11
    2008-6-9 2008-6-4 2008-5-31 2008-5-23
    2008-4-20 2008-4-19 20084-12 2008-4-3
      

  3.   

    using System;class Test
    {
      static int [,] T =
      {
        { 1, 2, 3, 4 },
        { 8, 4, 5, 5 },
        { 9, 7, 1, 3 },
      };  static DateTime [] D =
      {
        DateTime.Parse("2008-5-21"),
        DateTime.Parse("2008-6-14"),
        DateTime.Parse("2008-4-23"),
      };
      
      static DateTime [,] E;
      
      static void Main()
      {
        int k = T.GetLength(0);
        int n = T.GetLength(1);
        if (D.Length != k)
        {
          Console.WriteLine("矩阵维数不正确!");
          return;
        }
        E = new DateTime [k, n];
        for (int i = 0; i < k; i++)
        {
          for (int j = n - 2; j >= 0; j--)
          {
            T[i, j] += T[i, j + 1];
          } 
          for (int j = 0; j < n; j++)
          {
            E[i, j] = D[i].AddDays(-T[i, j]);
            Console.Write("{0:yyyy-MM-dd} ", E[i, j]);
          } 
          Console.WriteLine();
        }
      }
    }
    /* 程序输出:
    2008-05-11 2008-05-12 2008-05-14 2008-05-17 
    2008-05-23 2008-05-31 2008-06-04 2008-06-09 
    2008-04-03 2008-04-12 2008-04-19 2008-04-20 
    */
      

  4.   

    IEnumerator ie = d.GetEnumerator();
    这句没用
      

  5.   

    楼主觉得举的例子与   En[k] = D[k]- [T1n,T2n,T3n...Tkn] 
                  利用上式求  En-1[k] =  En[k]-[T1n-1,T2n-1,T3n-1...Tkn-1] 
    最后把 En[k]、En-1[k]...E1[k]  组合 得出一个 Datetime 类型 矩阵 E[k,n] 一致吗?解决的思路大概为:将矩阵T[k ,n]放在二维数组中,将 矩阵D[k]放在一维数组中,利用多重循环根据表达式用下标取数进行计算