英语老师要求学生按照如下规则写一串字母:
规则1、如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中前一个字母的大写;
规则2、如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中下一个字母的小写。
例如 zZzZYXWwxyYX 就是一个合法的字母串;而 wVUuvUTsR 就是非法的。
现在面对全班学生交上来的作业,老师请你写个程序自动批改。
输入格式:
输入在第一行给出一个不超过 100 的正整数 N。随后 N 行,每行给出一位学生的作业,即仅由英文字母组成的非空字母串,长度不超过 2×106。
输出格式:
对每位学生的作业,如果正确就在一行中输出 Y,否则输出 N。
输入样例:
2
zZzZYXWwxyYX
wVUuvUTsR
输出样例:
Y
N
一、C语言代码
数组
#include <stdio.h>
int main(int argc, char const *argv[])
{
char str[100][2000] ={0};
int n = 0;
int i = 0; int j = 0;int ret = 0;
scanf("%d\n",&n);
for( i =0 ; i <n ; i++)
{
gets(str[i]);
}
for (i = 0; i < n; i++)
{
for(j = 0; j < strlen(str[i]) -1 ;j++)
{
if( str[i][j] >= 'a' && str[i][j] < 'z')
{
if(str[i][j]-32 != str[i][j+1] && str[i][j+1] != str[i][j]+1 )
{
ret =printf("N\n");
break ;
}
}
else if(str[i][j] > 'A' && str[i][j] <= 'Z')
{
if(str[i] [j+1] != str[i][j]+32 && str[i] [j+1] != str[i][j]-1)
{
ret = printf("N\n");
break;
}
}
else if(str[i][j] == 'z')
{
if(str[i][j+1] != 'Z')
{
ret = printf("N\n");
break;
}
}
else if(str[i][j] == 'A')
{
if(str[i] [j+1] != 'a')
{
ret =printf("N\n");
break;
}
}
}
if( 0 == ret)
{
printf("Y\n");
}
}
return 0;
}
2.指针
#include <stdio.h>
int fun(char *p)
{
while( *(p+1) != '\0')
{
if (*p >= 'A' && *p <= 'Z')
{
if (!((32 == *(p+1) - *p) || (-1 == *(p+1) - *p)))
{
return 1;
}
}
else if (*p >= 'a' && *p <= 'z')
{
if (!((-32 == *(p+1) - *p) || (1 == *(p+1) - *p)))
{
return 1;
}
}
p++;
}
}
int main( )
{
char N[2*106] = {0};
int n = 0; int i = 0;
scanf("%d\n",&n);
for(i = 0;i < n;i++)
{
gets(N);
if(fun(N))
{
printf("N\n");
}
else
{
printf("Y\n");
}
}
return 0;
}
二、输出结果
数组输出结果: