zoukankan      html  css  js  c++  java
  • 蓝桥杯---汉字取首字母(位运算 & 水题)


    确实题目虽然有点水,但是开始的时候好像还真的没有想到怎么提取出这个编号一不小心感觉可以可以用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("
    ");
         }
         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]!='';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]!='';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

  • 相关阅读:
    SharePoint添加列表
    js求和
    经典.net面试题目
    sharepoint常见操作
    添加webpart时出现“此网页上的某个Web部件或Web表单控件无法显示或导入。该类型未注册为安全类型 。”
    关于js中"window.location.href"、"location.href"、"parent.location.href"、"top.location.href"的用法
    RegisterStartupScript,RegisterClientScriptBlock,Response.Write 简单说明区别
    jquery中的ready函数与window.onload谁先执行
    TreeView的TreeNode点击展示展开和收缩的效果
    如何让 TreeView 的节点不要生成 超级 链接
  • 原文地址:https://www.cnblogs.com/zswbky/p/5431939.html
Copyright © 2011-2022 走看看