各位快来帮帮忙呀,急呀!!
有个数据集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--------------------编程问答-------------------- mark --------------------编程问答-------------------- --------------------编程问答-------------------- 这个是算法题? --------------------编程问答-------------------- 靠,我费了这么半天劲,帮你编出来,还不结贴
{
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
}
补充:.NET技术 , C#