Problem: 棋盘小游戏(一道有意思的acm入门题
Problem Description
现有一个2行13列的棋盘,棋盘上的任意一个位置可以向他临近的8个位置移动。棋盘上的每一个位置的标号由一个大写的英文字母表示。现在给你一个移动的顺序,问你如何设置棋盘的标号。
Input
27个大写英文字母,保证每个字母至少出现一次
Output
如果有可以满足的情况 输出Yes,否则输出No
Sample Input
ABCDEFGHIJKLMNOPQRSGTUVWXYZ
Sample Output
Yes
hint:
满足条件的情况为:
YXWVUTGHIJKLM
ZABCDEFSRQPON
刚看到这道题是一脸懵逼的,我第一反应是英文字母到底是26还是27个(逃~)
言归正传,看到这道题,首先是理解不了,后来觉得应该不是很难,就分析了一下
1、27个字母,每个字母至少出现一次,说明只有一个字母出现两次,只有分析ta就行了(为了防止麻烦就假设它是A)
2、特殊情况无非就是XAAX/XAXA/XAXXAX/XAX...XAX(X表示不是A)
3、逐个分析
XAAX:做不到,因为棋盘上的任意一个位置可以向他临近的8个位置移动,明显不能原地跳2333
XAXAX:可以
X X X ...X X X X
X X X ...X X X A
XAXXAX:可以
X X X ...X X X X
X X X ...X X A X
XAX...XAX:可以,如例题
于是这道题就变成了一道判断有没有连续输入相同字母的制杖题目了~
代码(随便写写就可以AC了
#include <stdio.h> #include <string.h> int main() { int p; char s[1001]; while(scanf("%s",&s)!=EOF) { int x=1; for(p=0;p<strlen(s)-1;p++) { if(s[p]==s[p+1]) x=0; } if(x)printf("Yes\n"); else printf("No\n"); } return 0; }