作者huangtim (消失)
看板C_Sharp
标题Re: [问题] 矩阵的建立
时间Sat Apr 28 21:54:17 2007
我发现两个问题,不过我没有实际去compile,不知道是否会发生我预测的问题
第一个是,请你把j++改成++j,先加後加有时候会影响甚大
第二个是,你在创造状态矩阵的时候
可以这样初始化 int[][] stat = new int[3][];
但是在回圈中,你是将j指派到每一个二维索引,必须对其初始化
也就是 stat[i][j] = new int {j};
但是这样不符合new的用法,所以这个方法我早试过了...
我的程式是使用strin[][] Tower直接纪录每个塔的字串值
譬如"--+--"或" -+- ",来表示n=3的第3与第2碟盘
然後在move里面再写一个editor副程式,用来搬移字串值
搬移完毕之号,editor副程式会重新reset原新的参照索引
在editor副程式内也有一个detect副程式用来确认每个塔的第几层是空的
所以move传给editor的多载是"来源塔"与"目的塔"
editor会呼叫detect来传回
"来源塔的第几层为最高碟盘层"与"目的塔的第几层为最高空层"
然後editor收到这些参照索引进行string搬移与reset
於是完成河内塔的工作,我自己是觉得写的很没效率,所以才想去找是否有分析堆置的方法
※ 引述《Dragoon (好无聊...)》之铭言:
: 我的问题好像不是问得很好
: 我要的矩阵不用写出来
: 只要建立在程式内就好
: 我写了以下的矩阵
: {
: int n;
: Console.Write("请输入阵列数:");
: disks = Int32.Parse(Console.ReadLine());
: int[][] stat;
: stat = new int[3][];
: for (int i = 0; i < 2; ++i)
: {
: if (i == 0)
: {
: for (int j = 0; j <= n; j++ )
: stat[i][j] = j ;
: }
: else
: {
: for (int j = 0; j <= n; j++ )
: stat[i][j] = 0;
: }
: }
: 想说做出来的矩阵应该就是我想要的
: 却发现程式可以执行
: 但输入数字後
: 却出现了奇怪的错误
: 不知道问题在哪@@
: ※ 引述《huangtim (消失)》之铭言:
: : 首先呢,3 * n的矩阵
: : 他的第一行只能容纳 0, 1, 2, ... n-1
: : 然後你一定是赖副院长开的程设学生XD
: : 你一定是想写河内塔作业吧,Hmm..你的方法我已经用过了
: : 到後面可能会有输出到萤幕上的瓶颈,所以我後来换了三套标记哪里有碟盘的方法
: : Anyway..作业要自己写:P
: : 依照你的需求如下~然後你的是横的,我的是直的,这不会有差别,写横的也是可以啦
: : 判断输入部分是否为整数请用try & catch去写一个副程式检查,我就不多加着墨了
: : {
: : Console.Write("Please enter a integer number : ");
: : int n = Int32.Parse(Console.ReadLine());
: : Console.WriteLine("Press any key to build the Array...");
: : Console.ReadLine();
: : int i, j;
: : string output = "";
: : int[][] array = new int[n][];
: : for (i = 0; i < n; ++i )
: : {
: : array[i] = new int[] { i, 0, 0 };
: : }
: : for(i = 0; i < n; ++i)
: : {
: : for (j = 0; j < 3; ++j)
: : {
: : if (j == 2)
: : output += array[i][j] + "\n";
: : else
: : output += array[i][j] + ",";
: : }
: : }
: : Console.WriteLine(output);
: : Console.ReadLine();
: : }
--
Http://www.wretch.cc/blog/huangtim 内无正妹,废渣一枚
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.120.233