6,又一道经典的微软题

一、题目描述



The Orchid Pavilion(兰亭集序) is well known as the top of “行书”in history of Chinese literature. The most fascinating sentence is "Well I know it is a lie to say that life and death is the same thing, and that longevity and early death make no difference Alas!"(固知一死生为虚诞,齐彭殇为妄作).By counting the characters of the whole content (in Chinese version),the result should be 391(including punctuation). For these characters written to a text file,please select the possible file size without any data corrupt.

二、分析



  如果只是论一个汉字占用的字节数,那么 UTF-8 占用3个字节, UTF-16 占用2个字节。但是如果存储文本的话,需要在文本使用 EF BB BF 三个字节表示使用 UTF-8 编码,使用 FE FF 表示使用 UTF-16 编码。

  UTF-16 固定表示两个字节表示一个字符,不管是字母还是汉字; UTF-8 使用 1- 3 个字节表示一个字符

  • 0xxxxxxx 一个字节兼容ASCII,能表示127个字符
  • 110xxxxx 10xxxxxx.如果是这样的格式,则把两个字节当一个字符
  • 1110xxxx 10xxxxxx 10xxxxxx 如果是这种格式则是三个字节当一个字符

所以,UTF-8的空间是根据保存的内容不同而不同。如果保存的汉字多,使用 UTF-16 占用字符数双倍的空间,使用 UTF-8 占用字符数三倍的空间;如果保存的英文字母多,使用 UTF-16 使用字符数双倍的空间,使用 UTF-8 使用字符数相同的空间。

所以,不同情况下有不同的选择,这也是这么多字符集和编码格式存在的原因之一。

  

  不过,也有人说UTF-8编码的时候,占用空间为: 字母数 + 汉字数*3 + 3

  最后,本题答案:2 * 391 + 2 = 784 bytes in UTF-16 encoding

          3 * 391 + 3 = 1176 bytes in UTF-8 encoding

时间: 2024-10-12 17:51:44

6,又一道经典的微软题的相关文章

5,一道经典的微软程序题

一.题目描述 In the main() function, after ModifyString(text) is called, what’s the value of ‘text’? 1 int FindSubString( char* pch ) 2 { 3 int count = 0; 4 char * p1 = pch; 5 while ( *p1 != '\0' ) 6 { 7 if ( *p1 == p1[1] - 1 ) 8 { 9 p1++; 10 count++; 11 }

经典傻逼题

Description 这是一道经典傻逼题,对经典题很熟悉的人也不要激动,希望大家不要傻逼.考虑一张N个点的带权无向图,点的编号为1到N. 对于图中的任意一个点集(可以为空或者全集),所有恰好有一个端点在这个点集中的边组成的集合被称为割. 一个割的权值被定义为所有在这个割上的边的异或和. 一开始这张图是空图,现在,考虑给这张无向图不断的加边,加入每条边之后,你都要求出当前权值最大的割的权值, 注意加入的边永远都不会消失. Input 输入的第一行包括一个数ID表示数据编号, 如第一组数据中的ID

从一道简单的dp题中学到的...

今天想学点动态规划的知识,于是就看了杭电的课件,数塔问题啊,LCS啊都是比较经典的动规了,然后随便看了看就开始做课后练习题... HDOJ 1421 搬寝室 http://acm.hdu.edu.cn/showproblem.php?pid=1421 题目大意:从n(n <= 2000)个数中选出k对数(即2*k个),使它们的差的平方和最小. 例如:从8,1,10,9,9中选出2对数,要使差的平方和最小,则应该选8和9.9和10,这样最小,结果为2 因为知道是dp的题,先建个dp[][]数组,然

(转贼)一道经典概率问题

之前在哪部电影里面有这个桥段来着- 本文转载自nju_hupeng<zt 一道经典概率题的终极解法> 今天在精华区看见了关于那道经典概率题的讨论,一长串帖子,虽然“标准”解法在那里,但是标准解法的方法在不断的诘问面前说服力不够.在一番思考之后,我觉得我找到了一个比较有说服力的方法,即用贝叶斯公式避免先验后验的纠缠. 不知我的逻辑对否,欢迎大家指正: 经典题目: 有三个门,里面有一个里有汽车,如果选对了就可以得到这辆车, 当应试者选定一个门之后,主持人打开了另外一个门,空的. 问应试者要不要换一

一道有趣的算法题。。。

题目意思: 用1, 2, 3 ,4 ,5, 6, 7, 8, 9 组成3个三位数 abc, def 和 ghi, 每个数字恰好使用一次,要求abc:def:ghi = 1:2:3.输出所有解. 分析: 模拟所有三位数,判断条件有二: 一.i(abc):j(def):k(ghi)=1:2:3 二.判断是否出现的1~9之间的所有数字 代码: /** *一道有趣的算法题 * */ #include<iostream> #include<cstdio> using namespace st

一道模板元编程题源码解答(replace_type)

今天有一同学在群上聊到一个比较好玩的题目(本人看书不多,后面才知是<C++模板元编程>第二章里面的一道习题), 我也抱着试一试的态度去完成它, 这道题也体现了c++模板元编程的基础和精髓: 类型就是数据. 题目如下所述: Write a ternary metafunction replace_type<c,x,y> that takes an arbitrary compound type c as its first parameter, and replaces all oc

牛顿迭代法与一道经典编程问题

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method).它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. 既然牛顿迭代法能够用来求解方程的根,那么最好还是以方程 x2=n 为例,来试着求解它的根. 为此. 令f(x)=x2?n, 也就是相当于求解 f(x)=0 的解.如上图所看到的. 首先随便找一个初始值 x0,假设 x0不是解,做一个经过 (x0,f(x0)) 这个点的切线,与x轴的交点为x1.相同的道理.假

NOIP2005提高组 &amp;&amp; HLG 1219 谁拿了最多奖学金 (好经典的基础题 )

链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1219 Description 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成

一道有趣的算法题:仿照Excel的列编号,给定一个数字,输出该列编号字符串

       By Long Luo 最近遇到一个算法题: 仿照Excel的列编号,给出一个数字,输出该列编号字符串. 例如:A对应1,Z对应26,AA对应27,AZ对应52 ...... 这个题目是一个典型的26进制思路去处理,但是这个题目里面有很多陷阱,在1, 26, 52等特殊情况进行考虑,经过晚上接近1个小时的编写,完成的代码如下: C++代码如下: #include <iostream> #include <string.h> using namespace std; /