Codeforces #753 A. Linear Keyboard解题 自我思路

原题链接:Problem - A - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1607/problem/A

 题目大意:

给定一个特殊的只有一行的键盘,每一步只能移动一个键位   (可以同时完成移动和敲击按键的动作),给定一个只有小写字母构成的字符串,输出 要输出该字符串所需要的最少步数

输入的格式:

输入 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);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值