getchar:getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止。当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾则返回-1(EOF),且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。
小c得到了一个由26个键组成的随机线性键盘,每个键位对应一个小写字母,小c将用此键盘打出所给定的字符串并算出所需时间。
在键之间移动手需要的时间等于这些键的位置差的绝对值(键是从左到右从1到26编号)。当把手放在第一个键位和在同一个位置按下都不需要花费时间
例如,考虑一个键盘,其中从“a”到“z”的字母按连续的字母顺序排列。 如abcdefghijklmnopqrstuvwxyz
需要打出字符串hello
字母“h”、“e”、“l”和“o”分别位于8、5、12和15位。 因此,小c将花费|5−8|+|12−5|+|12−12|+|15−12|=13单位的时间来输入字符串“hello”。
输入格式:
第一行输入一个数字t,为测试样例的数量 (t<=1000)
每一组测试样例为俩行,第一行给出26个键位键盘,只有a-z组成,且每个字母出现的次数只有一次
第二行给出小c需要打出的字符串(长度为1-50)
输出格式:
输出小c打出这个字符串所需要的时间
输入样例:
在这里给出一组输入。例如:
5
abcdefghijklmnopqrstuvwxyz
hello
abcdefghijklmnopqrstuvwxyz
i
abcdefghijklmnopqrstuvwxyz
codeforces
qwertyuiopasdfghjklzxcvbnm
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qwertyuiopasdfghjklzxcvbnm
abacaba
输出样例:
在这里给出相应的输出。例如:
13
0
68
0
74
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
int t=0,i,j,k;
char x,s[55],a[26];
scanf("%d",&t);
getchar();
for(i=0;i<t;i++)
{
for(j=0;j<26;j++)
{
scanf("%c",&x);//26个字母
a[x-'a']=j+1;//x-'a'即为x到a的位置相差的距离
}
scanf("%s",s);
int ans=0;
for(k=1;k<strlen(s);k++)
{
ans+=abs(a[s[k]-'a']-a[s[k-1]-'a']);//求和
}
getchar();
printf("%d\n",ans);
}
return 0;
}