题目大意:
给定一个特殊的只有一行的键盘,每一步只能移动一个键位 (可以同时完成移动和敲击按键的动作),给定一个只有小写字母构成的字符串,输出 要输出该字符串所需要的最少步数
输入的格式:
输入 t 代表有 t 组实验数据
随后输入 2t 行数据
第一行为 键盘的格式
下一行为给出的字符串
例如:
5
abcdefghijklmnopqrstuvwxyz
hello
abcdefghijklmnopqrstuvwxyz
i
abcdefghijklmnopqrstuvwxyz
codeforces
qwertyuiopasdfghjklzxcvbnm
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qwertyuiopasdfghjklzxcvbnm
abacaba
输出的格式:
接上面的例子
13
0
68
0
74
思路展示:
首先定义出 int 的 t
制造FOR循环来满足题目多组输入的要求
int main (){
int t,j,k,i;
scanf("%d",&t);
for(i = 0;i<t;i++)
然后以:“abcdefghijklmnopqrstuvwxyz“ 为例
创造两个 char类型的数组,分别读入键盘和目标字符串
char a[26],b[50];
scanf("%s",&a);
scanf("%s",&b);
随后定义一个新的数组,长度与 b 数组相同,用来记录 b 数组里的字符在 a 数组的下标
实现代码如下:
m=strlen(b);
int c[m];
for(i=0;i<m;i++)
{
for(j=0;j<26;j++)
{
if(b[i]==a[j]) c[i]=j;
}
}
然后利用 c 数组里记录的字符的地址来运算步数,最后相加(别忘了绝对值)
int s=0;
for(i=0;i<m-1;i++)
{
s=s+fabs(c[i+1]-c[i]);
}
整体代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int i,m,j,t,q;
scanf("%d",&t);
for(q=0;q<t;q++){
char a[26],b[50];
scanf("%s",&a);
scanf("%s",&b);
m=strlen(b);
int c[m];
for(i=0;i<m;i++)
{
for(j=0;j<26;j++)
{
if(b[i]==a[j]) c[i]=j;
}
}
int s=0;
for(i=0;i<m-1;i++)
{
s=s+fabs(c[i+1]-c[i]);
}
printf("%d\n",s);
}
}