HDU1997:汉诺塔VII
来源:互联网 发布:无限试驾2优化 编辑:程序博客网 时间:2024/06/08 12:21
Problem Description
n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系 :
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
ai是A柱上的盘的盘号系列,bi是B柱上的盘的盘号系列, ci是C柱上的盘的盘号系列,最初目标是将A柱上的n个盘子移到C盘. 给出1个系列,判断它是否是在正确的移动中产生的系列.
例1:n=3
3
2
1
是正确的
例2:n=3
3
1
2
是不正确的。
注:对于例2如果目标是将A柱上的n个盘子移到B盘. 则是正确的.
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
ai是A柱上的盘的盘号系列,bi是B柱上的盘的盘号系列, ci是C柱上的盘的盘号系列,最初目标是将A柱上的n个盘子移到C盘. 给出1个系列,判断它是否是在正确的移动中产生的系列.
例1:n=3
3
2
1
是正确的
例2:n=3
3
1
2
是不正确的。
注:对于例2如果目标是将A柱上的n个盘子移到B盘. 则是正确的.
Input
包含多组数据,首先输入T,表示有T组数据.每组数据4行,第1行N是盘子的数目N<=64.
后3行如下
m a1 a2 ...am
p b1 b2 ...bp
q c1 c2 ...cq
N=m+p+q,0<=m<=N,0<=p<=N,0<=q<=N,
后3行如下
m a1 a2 ...am
p b1 b2 ...bp
q c1 c2 ...cq
N=m+p+q,0<=m<=N,0<=p<=N,0<=q<=N,
Output
对于每组数据,判断它是否是在正确的移动中产生的系列.正确输出true,否则false
Sample Input
631 31 21 131 31 11 263 6 5 41 12 3 263 6 5 42 3 21 131 31 21 1202 20 172 19 1816 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Sample Output
truefalsefalsefalsetruetrue
还是汉诺塔
也是一道规律题
只需要列出几项观察就是了,反正我是把到6个盘的所有状况都罗列了出来
规律就是
1:盘为奇数时,最底为奇数的只能在2号柱,底数为偶数的盘只能在1,3号柱
2:偶数与上面相反
3:每一根柱子上的盘是奇偶互换的
#include <stdio.h>int fun(int *a,int x){ int i,flag = 1; for(i = 0; i<x-1; i++) { if(a[i]%2 && a[i+1]%2) { flag = 0; break; } else if(a[i]%2 == 0 && a[i+1]%2 == 0) { flag = 0; break; } } return flag;}int main(){ int test; scanf("%d",&test); while(test--) { int n,a[65],b[65],c[65],x,y,z,i,flag = 0,flag2,flag1,flag3; scanf("%d",&n); scanf("%d",&x); for(i = 0; i<x; i++) scanf("%d",&a[i]); scanf("%d",&y); for(i = 0; i<y; i++) scanf("%d",&b[i]); scanf("%d",&z); for(i = 0; i<z; i++) scanf("%d",&c[i]); if(n%2) { if((a[0]%2 || !x) && (b[0]%2 == 0 || !y) && (c[0]%2 || !z)) flag = 1; } else { if((a[0]%2 == 0|| !x) && (b[0]%2 || !y) && (c[0]%2 == 0 || !z)) flag = 1; } flag1 = fun(a,x); flag2 = fun(b,y); flag3 = fun(c,z); if(flag && flag1 && flag2 && flag3) printf("true\n"); else printf("false\n"); } return 0;}
- HDU1997:汉诺塔VII
- hdu1997汉诺塔VII
- hdu1997汉诺塔VII
- Hdu1997汉诺塔VII
- hdu1997 汉诺塔VII(DFS递归调用)
- hdu1997 汉诺塔VII(深度优先搜索)
- 【(伪)递归】HDU1997 - 汉诺塔VII(非递归解法)
- hdu1997 汉诺塔
- HDU1997 汉诺塔7
- HDU1997
- 汉诺塔VII
- 汉诺塔VII
- 汉诺塔VII
- 汉诺塔VII
- 汉诺塔VII
- 汉诺塔VII
- HDU 1997 - 汉诺塔VII
- HDU 1997 汉诺塔VII
- 对NAT协议的理解
- java关于反射的粗略小结
- forward的细节
- Java - Framework - Annotation(注解)
- WebService 通过POST方式访问时候,因 URL 意外地以“/方法名”结束,请求格式无法识别 解决办法
- HDU1997:汉诺塔VII
- hdu 1026
- VC Data Time Picker 控件详解
- 程序员真的不值钱了吗?
- FFT算法在单片机中的使用&&LCD12864驱动 (2011-08-03 09:54:20)
- Java中finally
- Easier Done Than Said?
- Apache添加VirtualHost
- hdu 1124(数论,求末尾0的个数)