腾讯面试算法题

题目描述:
如何将一长串字符串里的小写字母转换成大写的。
注:要求不通过比较

思路:比较运算被限制住,那我们就试着通过逻辑运算来实现。

我们知道,a~z的ascii码:97~122 也就是:1100001~1111010
A~Z的ascii码:65~90 也就是:100 0001~1011010

可见大小写字母的二进制表示差异所在是第6个位,那么我们只要右移5位,使它编程第1位,再通过与运算判断第1位是0还是1,

这样也就知道是否是大小写了。

代码如下:

#include<iostream>
using namespace std;
int main()
{
    char p[]="abABcdefCDEFGghigklomnopkxyz";
    int len=strlen(p);

    for(int i=0;i<len;i++)
    {
            if(p[i]>>5&1) {    //右移5个位,此时若是小写字母,则最右边一位为1,执行if内部语句
            cout<<"Small Letter"<<endl;
            p[i]=p[i]-32;
            }
    }
    cout<<p<<endl;
    getchar();
    return 0;
}
时间: 2024-10-06 00:43:47

腾讯面试算法题的相关文章

一道看似非常难的面试算法题

这是昨天面试百度时碰到的一道算法题:任意数分三组,使得每组的和尽量相等.由于时间仓促,加之面试时头昏脑涨,这道题没做出来甚至没有给出思路,这让我多少有些遗憾和不甘.因为最近接触算法的东西较多而且本身对算法感兴趣,所以回家之后绞尽脑汁想把这题做出来.其实刚看到这题时感觉不难,但是因为数字个数及数值的不确定,我感觉这题越想越难.昨天一晚上没有睡好,甚至做梦都在想这题! 今天上午在多个群里问了这题,都没有给出思路,真是绝望至极.很多人都说 n/3 的思路,其实这种思路一开始就是死胡同.本人属于那种不会

面试算法题:爬楼梯,N级楼梯有多少种走法?

By Long Luo 个人博客链接 最近去面试时,在一家小公司面试时,公司小BOSS给我出了一道算法题: 一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法. 这个问题应该是一个很老的题目了,用中学数学来说,就是一个排列组合问题.当时拿到这个题目之后,首先想到使用递归的思想去解决这个问题: N级楼梯问题可以划分为:N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和. 先计算下0,1,2,3及楼梯有多少种走法: 1 --> 1 2 --> 11 2

常考面试算法题之暴力枚举

结合2017春招和秋招真题,以下几类算法题最常考,汇总了一下: 好多鱼! 牛牛有一个鱼缸.鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸.鱼缸内存在着大鱼吃小鱼的定律.经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B.考虑到这个,牛牛要放入的鱼就需要保证: 1.放进去的鱼是安全的,不会被其他鱼吃掉 2.这条鱼放进去也不能吃掉其他鱼 鱼缸里面已经存在的鱼已经相

远景面试算法题——FolderSize

描述 文件被存储在磁盘上的时候,通常为cluster方式.每个cluster具有固定的大小,一个文件所消耗的空间量始终是cluster大小的整数倍.因此,如果cluster的大小为100字节,165字节的文件将会使用实际使用200字节的存储空间,造成35个空间的浪费. 一个folder会有多个file,每个file单独计算浪费空间:如果某个folder没有出现,浪费空间为0 定义 Method signature: int[] calculateWaste(String[] files, int

偶然看到的面试算法题_最短时间找出十包粉末中的两蓝粉末。

题目:有4个杯子,10包粉末,其中有2包溶于水变蓝,其余无色,粉末溶于水2min才能显现颜色.求找出两包蓝色粉末的最短时间.假设水和粉末用不完. 解:以下给出四种解法,标记10包粉末为(1,2 ... ) 杯子为[1,2,3,4]首先我想会不会是有某种算法,dp 二分..@[email protected]..没有,懵懵的. 法一:这是我最初想到的比较傻的方法 第一趟:[12,34,56,78] 每个杯子分别放两包加水融化,剩下两包不管.可能的情况: (1)0个杯子变色,说明剩下两包就是蓝粉末

实习生面试--算法题之一

题目:在整型数中只有1位是1,求1在整型数中的位置? 通常,面试者给的答案是一位一位的右移,并判断是否移位后的值是1,如果是1,输出被移位的位数就是我们要的答案了. 但是这并不是最优的答案,时间复杂度是O(n).那么更好的算法是什么样的呢,其实我们可以采用二分法更高效的解决本问题,时间复杂度是O(logn). 下面给出代码,并测试时间消耗. 算法1 1 int scan(unsigned int value) 2 { 3 int len = sizeof (unsigned int) * 8;

[面试算法题重做]翻转句子中单词的顺序

话说工作中算法用的真的多么?????? 虽然工作中用不到,但是你总得换工作吧,防不住笔试面试中问你些这么个玩意. 而且,多思考,有助于活跃头脑了.深深扎入项目中童鞋们还可以活跃活跃,防止生锈. 话不多说,题目如下: 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“I am a student.”,则输出“student. a am I”. 在何海涛的日记中,分析方法是 先颠倒句子中的所有字符.这时,

百度面试算法题

1.代码编译过程 在cpp文件中展开include文件. 将每个cpp文件编译为一个对应的obj文件. 连接obj文件成为一个exe文件(或者其它的库文件) 2.100W个整数中求最小的k个数,有哪些方法,优缺点 快速排序: 分区时,根据数P将数组分为两部分,设大于P的数个数为a,小于P的数的个数为b.如果,a>=k,则从这a个数取最大的k个数,若a<k,则从b个数取最大的k-a-1个. 3.两个10G的文件中,求含有相同整数,有哪些方法,优缺点 (1)快排+二分查找 (2)位图法 位图法的应

实习生面试--算法题之字符串最长公共子序列长度

题目:求两字符串的最长公共子序列的长度. 题外话:最长公共子串,子序列问题是被充分讨论的问题,网上一搜一大把,请bing之. 本题只要求求最长公共子序列的长度,而不需要记录最长的公共子序列,给予了我们便利,请参考代码: 1 int max(int a, int b) 2 { 3 return a > b ? a : b; 4 } 5 6 int lcs(char* str1, char* str2) 7 { 8 if (str1 == nullptr || str2 == nullptr) 9