当前位置:编程学习 > C#/ASP.NET >>

各位快来帮帮忙呀,急呀!!

有个数据集dataset,名称为DS,内只有一个table,名称为TB,该table有x个行(rows),y个整型列(columns),写一个

算法实现:将其按“从左到右、从上到下”的顺序,后退一位,第一位(rows(0),columns(0))由被移出的最后一位(rows(x-

1),columns(y-1))填上。

例如(当x=3, y=3):
1 2 3    step 1      9 1 2    step 2        8 9 1
4 5 6 -------------> 3 4 5 -------------->  2 3 4  ......
7 8 9                6 7 8                  5 6 7


大家帮忙做一下这道题,万分感谢!! --------------------编程问答-------------------- 期待会的,我也学习下下。 --------------------编程问答-------------------- 1 2 3
4 5 6
7 8 9

step1之后
9 1 2
3 4 5
6 7 8

step2之后
8 9 1
2 3 4
5 6 7
--------------------编程问答--------------------

private void SetTable(ref DataTable dt)
{
    object lastValue = dt.Rows[dt.Rows.Count - 1][dt.Columns.Count - 1];
    for (int rowNum = dt.Rows.Count - 1; rowNum >= 0; rowNum--)
    {
        for (int columnNum = dt.Columns.Count - 1; columnNum >= 0; columnNum--)
        {
            if (columnNum == 0)
            {
                if (rowNum != 0)
                    dt.Rows[rowNum][columnNum] = dt.Rows[rowNum - 1][dt.Columns.Count - 1];
            }
            else
                dt.Rows[rowNum][columnNum] = dt.Rows[rowNum][columnNum - 1];
            if (columnNum == 0 && rowNum == 0)
                dt.Rows[rowNum][columnNum] = lastValue;
        }
    }
}


我已经试过了,保证没问题,请保证DataTable的每列的数量类型一致
如果是int就都是int,如果是string就都是string
给分吧 --------------------编程问答-------------------- 有点意思。。。。学习学习,不过应该还可以用别的方式实现吧。。。。。。。。呵呵 --------------------编程问答--------------------
public class MyClass
{
    public static void RunSnippet()
    {
        DataSet ds = CreateDataSet();

        PrintDataTable(ds.Tables[0]);
        DataTable dt = ds.Tables[0];

        for (int idx = 0; idx < 2; idx++)
        {
            MoveSetp1(ref dt);

            PrintDataTable(ds.Tables[0]);
        }
    }

    public static void MoveSetp1(ref DataTable dt)
    {
        int numcnt = dt.Rows.Count * dt.Columns.Count;
        if (numcnt <= 1)
            return;
        object tmp = dt.Rows[dt.Rows.Count - 1][dt.Columns.Count - 1];

        for (int idx = numcnt - 1; idx > 0; idx--)
        {
            Position now = GetPosition(idx, dt.Columns.Count);
            Position pre = GetPosition(idx- 1, dt.Columns.Count);

            dt.Rows[now.rowidx][now.colidx] = (int)(dt.Rows[pre.rowidx][pre.colidx]);
        }

        dt.Rows[0][0] = tmp;
    }

    public static Position GetPosition(int num, int rowcount)
    {
        int rowidx = num / rowcount;
        int colidx = num % rowcount;

        return new Position { rowidx = rowidx, colidx = colidx };
    }

    public static void PrintDataTable(DataTable dt)
    {
        Console.WriteLine("打印开始");
        for (int idx1 = 0; idx1 < dt.Rows.Count; idx1++)
        {
            for (int idx2 = 0; idx2 < dt.Columns.Count; idx2++)
            {
                Console.Write(dt.Rows[idx1][idx2] + "\t");
            }

            Console.WriteLine();
        }
        Console.WriteLine("打印结束");
    }

    public static DataSet CreateDataSet()
    {
        DataSet ds = new DataSet();

        DataTable tmp = new DataTable();
        DataColumn dc;
        for (int idx = 0; idx < 10; idx++)
        {
            dc = new DataColumn("col" + idx, typeof(int));
            tmp.Columns.Add(dc);
        }

        ds.Tables.Add(tmp);

        for (int idx = 0; idx < 10; idx++)
        {
            DataRow dr = tmp.NewRow();
            for (int colidx = 0; colidx < 10; colidx++)
            {
                dr["col" + colidx] = idx * 10 + colidx;
            }

            tmp.Rows.Add(dr);
        }

        return ds;
    }

    public class Position
    {
        public int rowidx { get; set; }
        public int colidx { get; set; }
    }
    #region Helper methods

    public static void Main()
    {
        try
        {
            RunSnippet();
        }
        catch (Exception e)
        {
            string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString());
            Console.WriteLine(error);
        }
        finally
        {
            Console.Write("Press any key to continue...");
            Console.ReadKey();
        }
    }

    private static void WL(object text, params object[] args)
    {
        Console.WriteLine(text.ToString(), args);
    }

    private static void RL()
    {
        Console.ReadLine();
    }

    private static void Break()
    {
        System.Diagnostics.Debugger.Break();
    }

    #endregion
}
--------------------编程问答-------------------- mark --------------------编程问答--------------------
引用 3 楼 hanchao_5168 的回复:
C# code

private void SetTable(ref DataTable dt)
{
    object lastValue = dt.Rows[dt.Rows.Count - 1][dt.Columns.Count - 1];
    for (int rowNum = dt.Rows.Count - 1; rowNum >= 0; rowNum--)
    {
……
--------------------编程问答-------------------- 这个是算法题? --------------------编程问答-------------------- 靠,我费了这么半天劲,帮你编出来,还不结贴
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,