金山招聘机试题(第6题)

题目如下:

1.在程序设计和运行中,有时候我们希望一个类有且只有一个实例,请用C++语言写一个这样的示例类。

2. 请实现一个具有以下功能的函数,但不能使用任何形式条件判断、分支、跳转等类型的语句或指令:
int sign(INT32 x) {
  if (x > 0) return 1;
  else if (x == 0) return 0;
  else return -1;
}


3. 请实现以下两个函数:
  char toupper(char c);
  char tolower(char c);
分别用于将传入的字母转为大写和小写。两个函数传入的参数取值范围都是[a-zA-Z],并且为ASCII编码,实现时不用检查参数合法性。解法中不能使用任何形式的条件判断、分支、跳转等类型的语句或指令。请尽可能多的写出你知道的办法。

4. 请完成一个函数,找出给定目录下体积最大的文件。函数可以指定是否搜索子目录。

5. 有一段英文文档(只由字母和空格组成),请实现一个函数,把这篇文档中指定的单词替换为目标单词。

以下两题请任选一道作答,如果时间充足,也可以两道都答:
6. 给定一个介于0与1之间的小数,以及分母的最大位数(1-6位)。请构造一个程序,寻找分母在指定位数之内,与给定小数最接近的分子——分母对(显然,分 子、分母须为整数)。例如,黄金分割比0.618...,分母限定为2位时,最接近的分数为55/89;分母限定为3位时,为 610/987。

7. 请分别用C++的面向对象和泛型机制,编写实现Template Method模式的示例代码,并比较两种方式各自的优缺点。 

 

 

6.给定一个介于0与1之间的小数,以及分母的最大位数(1-6位)。请构造一个程序,寻找分母在指定位数之内,与给定小数最接近的分子——分母对(显然,分 子、分母须为整数)。例如,黄金分割比0.618...,分母限定为2位时,最接近的分数为55/89;分母限定为3位时,为 610/987。

 

程序:

        /// <summary>
        
/// 寻找
        
/// </summary>
        
/// <param name="len">小数点位数</param>
        
/// <param name="max">最大值1位10,2位100</param>
        
/// <param name="n">接近的值</param>
        
/// <returns></returns>
        public string GetMax(int len,int max,decimal n)
        {
            
string str = n.ToString();
            
string str1 = "0";
            
string str2 = "1";
            
int k = 1;
            
int m = 1;
            
if (len >= 2)
            {
                k = (len - 1* 10;
                m = k;
            }
            
for (int i=k; i < max; i++)
            {
                
for (int j=m; j < max; j++)
                {
                    
if ((decimal.Parse(i.ToString()) / decimal.Parse(j.ToString())) < n && (decimal.Parse(i.ToString()) / decimal.Parse(j.ToString())) > decimal.Parse(str1) / decimal.Parse(str2))
                    {
                        str1 = i.ToString();
                        str2 = j.ToString();
                    }
                }
            }
            
return str1 + "/" + str2;
        }


 

posted @ 2010-05-28 18:13  nyzfl  阅读(630)  评论(0编辑  收藏  举报