蓝桥杯---汉字取首字母(位运算 & 水题)
确实题目虽然有点水,但是开始的时候好像还真的没有想到怎么提取出这个编号一不小心感觉可以可以用unsigned char 这种类型,直接转为16进制,但是之后发现虽然第一次在codeblock中还行,但是第二天尝试的时候还是出错了,DEV中没有问题,所以瞬间感觉自己的肯定不是标准答案,查询之后才感觉位运算终于在题目中能够运用上了
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int table[27] =
{
0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,
0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBBF7,
0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,
0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,
0xCDDA,0xCDDA,0xCDDA,0xCEF4,0xD1B9,
0xD4D1,0xFFFF
};
//注意题中没有关于i,u,v开头的拼音(因为拼音中没有以i,u,v开头的),所以用下一个值代替即可,最后边界用极大值代替
int search(int p)
{
for(int i = 0; i < 27; ++i)
if(table[i] > p)
return i-1;
}
int main()
{
int T;
char buf[110];
scanf("%d", &T);
while(T--)
{
scanf("%s", buf);
int len = strlen(buf);//一个汉字占两个字节
for(int i = 0; i < len; i+=2)
{
int tmp1 = 0x000000ff & buf[i]; ///取第一个字节,因为temp1为32位整数,所以只需取出其低八位即可。 char字符只有一个字节
int tmp2 = 0x000000ff & buf[i+1]; ///取第二个字节。
int pos = search( (tmp1<<8) +tmp2);///组合成编码后在 编码表中查找。
printf("%c", 'A'+pos);
}
printf("\n");
}
return 0;
}
开始的时候自己写的代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#define INF f0x3f3f3f3f
using namespace std;
int s[30];
void judgePrintf(unsigned char ch[],char table[]){
int i;
for(int x=0;ch[x]!='\0';x+=2) {
for(i=0;i<23;i++)
if(ch[x]*1000+ch[1+x]<s[i])
break;
cout<<table[i-1];
}
cout<<endl;
return ;
}
int main(){
int Count=0;
char table[]="ABCDEFGHJKLMNOPQRSTWXYZ";
unsigned char ch1[100]="啊芭擦搭蛾发噶哈击喀垃妈拿哦啪期然撒塌挖昔压匝",temp[100];
for(int i=0;ch1[i]!='\0';i+=2){
s[Count++]=ch1[i]*1000+ch1[i+1];
}
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>temp;
judgePrintf(temp,table);
}
return 0;
}
顺便说一下char和unsigned的区别,好像其他的什么大的区别也没有,就是char能表示-128~127, unsigned char没有符号位,因此能表示0~255
蓝桥杯---汉字取首字母(位运算 & 水题)的更多相关文章
- 【BZOJ4300】绝世好题(位运算水题)
点此看题面 大致题意: 给你一个序列\(a\),让你求出最长的一个子序列\(b\)满足\(b_i\&b_{i-1}!=0\). 位运算+\(DP\) 考虑设\(f_i\)表示以第\(i\)个数 ...
- [poj2777] Count Color (线段树 + 位运算) (水题)
发现自己越来越傻逼了.一道傻逼题搞了一晚上一直超时,凭啥子就我不能过??? 然后发现cin没关stdio同步... Description Chosen Problem Solving and Pro ...
- java获取汉字拼音首字母 --转载
在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.Unsupp ...
- AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字,Filterable的使用)
AutoCompleteTextView具有输入提示的功能,但是它的这种提示不适合对股票列表的过滤,如果你玩过股票软件,就会知道只要输入股票名称的首字母或股票代码就会出现符合匹配的股票,这种过滤怎么实 ...
- sql 汉字转首字母拼音
从网络上收刮了一些,以备后用 create function fun_getPY(@str nvarchar()) returns nvarchar() as begin declare @word ...
- JAVA获取汉字拼音首字母
package com.common.util; import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Titl ...
- java汉字获取首字母
前言 在项目中很多时候我们需要获取姓名或者名称的首字母或者全拼,以用于模糊查询或者字母查询,在这里分享一个实例:供小伙伴们参考. 导入jar包 <dependency> <group ...
- C# 获取汉字拼音首字母
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...
- Android -- 获取汉字的首字母
转换 获取一个汉 ...
随机推荐
- selenium+python自动化之操作浏览器
一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址 二.设置休眠 1.由于打开百度网址后,页面加 ...
- 如何将XSD文件以及引入import的文件生成相应的C#类。
下将微软的 Sample Code Generator 1.4.2.1 如果链接不可以用,请到google上搜索,并安装. 拷贝要生成的XSD相关文件到安装目录,MS-DOS下进入安装目录. 执行命令 ...
- [linux] cp: omitting directory `XXX'问题解决
在linux系统中复制文件夹时提示如下: cp: omitting directory `foldera/' 其中foldera是我要复制的文件夹名,出现该警告的原因是因为foldera目录下还存在目 ...
- jQuery网页右侧固定层显示隐藏在线qq客服代码
CSS代码: @charset "utf-8"; ;;} html,body{font-size:12px;font-family:"微软雅黑";outline ...
- Servlet Filter 1
1.Filter简介 )Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图 ...
- .NET使用OpenSSL生成的pem密钥文件
NET要使用OpenSSL生成的pem密钥文件,网上资料很少(http://www.faqs.org/rfcs/rfc1421.html,RFC1421文件又老长老长),仅有的资料还是有错误的,所以今 ...
- WPF--Calendar控件高级使用
一.得到当前显示的月份: DateTime SelectedDay = this.MC.DisplayDate; 二.得到当前选中的天,得到当前选中的周,得到当前显示的月份: 如果你使用系统默认的事件 ...
- WINRARA 排除 .svn 文件夹
加入-x*\.svn -x*\.svn\* 即可: rar.exe u -m3 -s -r -o+ -x*.db -x*.zip -x*.rar -x*\.svn -x*\.svn\* zmv9net ...
- php时间日期处理
php日期函数: 首先想到的就是date(),time(),strtotime(),mktime() strtotime() strtotime()函数用于将英文文本字符串表示的日期转换为时间戳,为 ...
- Python标准库
Python标准库是随Python附带安装的,它包含大量极其有用的模块.熟悉Python标准库是十分重要的,因为如果你熟悉这些库中的模块,那么你的大多数问题都可以简单快捷地使用它们来解决. sys模块 ...