线性随机键盘

 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值