两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的距离为2,L 和 Q 的距离为 5。对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。例如:ZOO 的内部距

两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的距离为2,L 和 Q 的距离为 5。对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。例如:ZOO 的内部距离为 22,其中 Z 和 O 的距离为 11。请问,LANQIAO 的内部距离是多少?

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int cnt=0,num=0;
	string s;
	cin>>s;
	for(int i=0;i<s.length();i++){
		for(int j=num;j<s.length();j++){
			cnt+=abs((s[i]-'A')-(s[j]-'A'));
		}
		num++;
	}
	cout<<cnt;
	return 0;
}
要实现这个功能,需要用到以下硬件和软件: 硬件: - 51单片机开发板 - 两个LED矩阵(16x8) - 键盘模块 软件: - Keil C51开发环境 - 51单片机的编程语言 以下是实现步骤: 1.连接硬件。将两个LED矩阵和键盘模块分别连接到51单片机开发板上。 2.编写代码。在Keil C51开发环境编写51单片机的程序代码。首先定义LED矩阵的引脚连接和键盘模块的引脚连接,然后设置LED矩阵的扫描方式,以便能够显示按键号和字母。 3.实现按键扫描。通过键盘模块的引脚连接,实现对键盘按键的扫描。当按键按下时,根据按键的位置字母表,将对应的按键号和字母显示在LED矩阵上。 4.编译和下载。将编写好的程序代码进行编译,生成HEX文件。然后将HEX文件下载到51单片机开发板上,即可实现该功能。 下面是参考代码,仅供参考: ```c #include <reg52.h> #include <intrins.h> //定义LED矩阵和键盘模块的引脚连接 sbit LED1 = P1^0; //LED矩阵1 sbit LED2 = P1^1; //LED矩阵2 sbit ROW1 = P2^0; //键盘模块行1 sbit ROW2 = P2^1; //键盘模块行2 sbit ROW3 = P2^2; //键盘模块行3 sbit ROW4 = P2^3; //键盘模块行4 sbit COL1 = P2^4; //键盘模块列1 sbit COL2 = P2^5; //键盘模块列2 sbit COL3 = P2^6; //键盘模块列3 sbit COL4 = P2^7; //键盘模块列4 //定义字母表 unsigned char code LETTERS[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; //定义扫描方式 unsigned char code SCAN[16] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F, 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; //延时函数 void delay(unsigned int t) { unsigned int i, j; for(i = t; i > 0; i--) for(j = 110; j > 0; j--); } //向LED矩阵1写入数据 void writeLED1(unsigned char dat) { unsigned char i; for(i = 0; i < 8; i++) { LED1 = 0; P0 = dat; LED1 = 1; dat <<= 1; } } //向LED矩阵2写入数据 void writeLED2(unsigned char dat) { unsigned char i; for(i = 0; i < 8; i++) { LED2 = 0; P0 = dat; LED2 = 1; dat <<= 1; } } //扫描键盘 unsigned char scanKey() { unsigned char i, j, key; ROW1 = 0; ROW2 = 1; ROW3 = 1; ROW4 = 1; for(i = 0; i < 4; i++) { delay(1); j = P2; switch(j & 0xF0) { case 0xE0: key = 0; break; case 0xD0: key = 4; break; case 0xB0: key = 8; break; case 0x70: key = 12; break; default: key = 0xFF; break; } if(key != 0xFF) return key + (j & 0x0F); ROW1 = ~ROW1; ROW2 = ~ROW2; ROW3 = ~ROW3; ROW4 = ~ROW4; } return 0xFF; } //主函数 void main() { unsigned char i, key; while(1) { for(i = 0; i < 16; i++) { writeLED1(SCAN[i]); writeLED2(0xFF); delay(1); } key = scanKey(); if(key != 0xFF) { writeLED1(0xFF); writeLED2(SCAN[key % 16]); delay(100); writeLED2(0xFF); writeLED1(SCAN[key / 16]); delay(100); writeLED1(0xFF); writeLED2(0xFF); P0 = LETTERS[key]; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值