题目:一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手上没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组。
C#代码:
//放入桌子上数组
public static int[] v = new int[0];
public static int[] m = new int[0];
static void Main(string[] args)
{
Console.WriteLine("请输入1到n的有序数字!");
string str = Console.ReadLine();//从控制台读入输入
try
{
var str1 = int.Parse(str);
test(str1);
var c = "";
for (int i = 0; i < v.Length; i++)
{
if (v.Length == i + 1)
{
c += v[i];
break;
}
c += v[i] + @",";
}
Console.WriteLine("原牌堆:" + string.Join(@",", m));
Console.WriteLine("新的牌堆:" + c);
Console.ReadLine();
}
catch
{
Console.WriteLine("请重新输入1到n的有序数字!");
Console.ReadLine();
return;
}
}
public static void test(int a)
{
v = new int[a];
m = new int[a];
ArrayList re = new ArrayList() { };
for (int i = 0; i < m.Length; i++)
{
m[i] = i + 1;
}
//一张纸牌组成数组
for (int i = 0; i < m.Length; i++)
{
re.Add(m[i]);
}
//第一次 i初始值为0
reverse(0, re);
}
public static void reverse(int i, ArrayList b)
{
//每次第一张牌第一地标放入桌上新的数组中
v[i] = int.Parse(b[0].ToString());
//放入之后重新排列的数组
//移除第一位地标数组
b.Remove(b[0]);
//返回
if (b.Count == 0)
return;
var c = b[0];
//移除第二位坐标数组
b.Remove(c);
//第二位坐标元素放入到最下面
b.Add(c);
i++;
//递归
reverse(i, b);
}