现在的孩子可真行,我小学五年级的时候还不知道计算机为何物呢,如下是一个朋友替他小侄子问我的题目:
13张扑克, 如何排列使第一张是A, 再把后面的一张放在最后, 再翻为2, 再把后面2张放在最后, 依此类推, 直到最后一张为K. 问原来的顺序是什么?我的解法是这样的,倒着顺序拿,设两个数组,一个大小为13是a,一个为14是b,a中放1-13的数,b中准备放牌原来的顺序。
a中:1,2,3,4,5,6,7,8,9,10,11,12,13
b中:
第一次:13
第二次:12,13
第三次:13,12
第四次:11,13,12
第五次:12,11,13
第六次:10,12,11,13
第七次:13,10,12,11,13
... ....
程序如下:
static
void
Main(
string
[] args)
... {
int[] a = new int[13];//初始化数据组1是A,11是J,12是Q,13是K
int[] b = new int[14];//b中为最开始数据的组合
for (int i = 0; i < 13; i++)
...{
a[i] = i + 1;
}
for (int i = 12; i >= 0; i--)
...{
r(12 - i, b);
b[0] = a[i];
r1(12 - i, b);
}
for (int i = 0; i < 13; i++)
...{
Console.WriteLine(b[i]);
}
}
static void r( int j, int [] input) // 按位向后错一位
... {
for (int i = j; i >=0; i--)
...{
input[i + 1] = input[i];
}
}
static void r1( int j, int [] input)
... {
int temp = input[j];
r(j - 1, input);
input[0] = temp;
}
... {
int[] a = new int[13];//初始化数据组1是A,11是J,12是Q,13是K
int[] b = new int[14];//b中为最开始数据的组合
for (int i = 0; i < 13; i++)
...{
a[i] = i + 1;
}
for (int i = 12; i >= 0; i--)
...{
r(12 - i, b);
b[0] = a[i];
r1(12 - i, b);
}
for (int i = 0; i < 13; i++)
...{
Console.WriteLine(b[i]);
}
}
static void r( int j, int [] input) // 按位向后错一位
... {
for (int i = j; i >=0; i--)
...{
input[i + 1] = input[i];
}
}
static void r1( int j, int [] input)
... {
int temp = input[j];
r(j - 1, input);
input[0] = temp;
}