51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

楼主: 馨香碧玉
打印 上一主题 下一主题

[资料] 微创的入职测试题

[复制链接]

该用户从未签到

21#
发表于 2006-10-4 22:45:07 | 只看该作者
需要编程序实现,第二题倒是还可以
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2006-10-8 11:48:10 | 只看该作者
实在是不会,
回复 支持 反对

使用道具 举报

该用户从未签到

23#
发表于 2006-10-10 16:34:29 | 只看该作者
看到这题我就已经崩溃了。
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2006-10-12 18:38:57 | 只看该作者
郁闷,要晕了~~~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

25#
发表于 2007-2-2 11:43:59 | 只看该作者
我今年1月份面试的时候就不是这套题拉,全是与测试相关的,只有几个程序题还是选择,还有就是质量体系方面的
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2007-2-2 14:40:38 | 只看该作者
我去微创面试过.net开发,他妈的太难了
不知道人家公司啥意思?
测试我估计也要整人
建议别去了
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2007-2-5 08:35:31 | 只看该作者
51对学员居然有回帖要求,那么我就来解答这两道程序题好了.现编,先占个楼顺便多回一贴~~sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2007-2-5 09:44:15 | 只看该作者
第一题应该不是考察从算法中优化这个程序,作为测试员 你只要注意什么类型的数据结构可以存放如此海量的数字而已。
第2题我想大家都可以做出来的吧~。
回复 支持 反对

使用道具 举报

该用户从未签到

29#
发表于 2007-2-5 09:44:43 | 只看该作者

第一题

用数组计算大数,用程序模仿小学学的乘法规则即可.
代码如下(c#)
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] anw = new int[2000];  //1000位乘1000位最多得数2000位
            for (int i = 0; i < 2000; i++)
                 anw [ i ] = 0;    //初始化answer数组
            int lenth = 1999;  
            for (int i = 999; i >= 0; i--)
            {
                    int l = lenth;
                    int carry = 0;
                    for (int j = 999; j >= 0; j--)
                    {
                        int preanw = anw[l];
                        anw[l] = (((num2 [ i ]  * num1[j]) % 10) + carry + anw[l]) % 10; //num1和num2数组即为给定的两个1000位大数

                        carry = (num2 [ i ] * num1[j] + carry + preanw) / 10;
                        l--;
                    }
                    anw[l] = carry;
                    lenth--;
            }
            for ( int i = 0; i < 2000; i++)
                Console.Write(anw [ i ] );
        }
    }
}

[ 本帖最后由 Oh!My 于 2007-2-5 10:45 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2007-2-5 09:52:28 | 只看该作者

第一题扩展检验版,自己跑着玩

其实1000位只是一个摆设罢了,目的是告诉你不能用常规的乘法做用上面的算法可以实现任意两个数的相乘.下面贴可以直接编译运行的代码.直接输入任意两个数进行计算.
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input1 = Console.ReadLine();
            string input2 = Console.ReadLine();
            int[] num1 = new int[input1.Length];
            int[] num2 = new int[input2.Length];
            int[] anw = new int[num1.Length + num2.Length];
            for (int i = 0; i < input1.Length; i++) //输入两个数,转换时要把asc码转换成数字,减48
                num1 [ i ]  = (byte)input1 [ i ]  - 48;
            for (int i = 0; i < input2.Length; i++)
                num2 [ i ]  = (byte)input2 [ i ]  - 48;
            for (int i = 0; i < anw.Length; i++)
                anw [ i ]  = 0;

            int lenth = anw.Length - 1;
            for (int i = (num2.Length - 1); i >= 0; i--)
            {
                    int l = lenth;
                    int carry = 0;
                    for (int j = (num1.Length - 1); j >= 0; j--)
                    {
                        int preanw = anw[l];
                        anw[l] = (((num2 [ i ]  * num1[j]) % 10) + carry + anw[l]) % 10;
                        carry = (num2 [ i ]  * num1[j] + carry + preanw) / 10;
                        l--;
                    }
                    anw[l] = carry;
                    lenth--;
            }
            for ( int i = 0; i < anw.Length; i++)
                Console.Write(anw [ i ] );
            Console.ReadKey();
        }
    }
}

[ 本帖最后由 Oh!My 于 2007-2-5 09:55 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

31#
发表于 2007-2-5 10:00:28 | 只看该作者

第二题 偷懒输出办

比较第一题第二题更加容易了,10分钟搞定.题目没有说输出不可以,先贴最简单的直接打印到屏幕的版本,可在.net下直接编译运行
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void sepstring(string input, string inputsig)
        {
            int flag = 0;
            for (int i = 0; i < input.Length; i++)
            {
                for (int j = 0; j < inputsig.Length; j++)
                    if (input [ i ]  != inputsig[j])
                        flag = 1;
                    else
                    {
                        flag = 0;
                        break;
                    }
                if (flag == 1)
                    Console.Write(input [ i ] );
                else
                    Console.Write(" "); //打印空格隔开,也可以换作其他字符
                                    
            }
        }
        static void Main(string[] args)
        {
            string inputline = Console.ReadLine();
            string inputsig = Console.ReadLine();
            sepstring(inputline, inputsig);
            Console.ReadKey();

        }
    }
}
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2007-2-5 10:10:15 | 只看该作者

第二题数组分割法

当然了打印毕竟不是很正规,那么就写个分装函数输入字符串,输出分割后的字符串数组(动态的).这下正规了吧.注意这里用到了arraylist动态数组.和静态数组的用法有些区别.
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections; //使用arraylist需要声明的空间

namespace ConsoleApplication2
{
    class Program
    {
        static ArrayList  sepstring(string input, string inputsig)
        {
            int flag = 0;
            string temp = string.Empty;
            ArrayList array = new ArrayList();
            for (int i = 0; i < input.Length; i++)
            {
                for (int j = 0; j < inputsig.Length; j++)
                    if (input [ i ]  != inputsig[j])
                        flag = 1;
                    else
                    {
                        flag = 0;
                        break;
                    }
                if (flag == 1)
                    temp = temp + input [ i ] ;
                else
                {
                    if (temp != string.Empty)
                    {
                        array.Add(temp);
                        temp = string.Empty;
                    }
                }

            }
            if (temp != string.Empty)
                array.Add(temp);
            return array;
        }
        static void Main(string[] args)
        {
            string inputline = Console.ReadLine();
            string inputsig = Console.ReadLine();
            sepstring(inputline, inputsig);
            Console.ReadKey();

        }
    }
}
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2007-2-5 10:29:22 | 只看该作者

第二题运行效率优化版

第二题还有优化的空间.因为双循环在实际工作中是要尽量避免的.试想如果输入的分割符号非常多,那么每个字符都要遍历一编代价可能比较高.实际工作中,应该优化.使用哈希表数据结构进行优化,把双循环变为单循环.代码如下(可直接编译运行)
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections; //hashtable需要使用到的空间
namespace ConsoleApplication2
{
    class Program
    {
        static void sepstring(string input, string inputsig)
        {
            Hashtable symbol = new Hashtable();
            for (int i = 0; i < inputsig.Length; i++)
                symbol.Add(inputsig [ i ] , i);
            for (int i = 0; i < input.Length; i++)
            {
                if(!symbol.ContainsKey(input [ i ] ))
                    Console.Write(input [ i ] );
                else
                    Console.Write(" "); //偷懒直接打印,也可用上一个解法的arraylist
            }
        }
        static void Main(string[] args)
        {
            string inputline = Console.ReadLine();
            string inputsig = Console.ReadLine();
            sepstring(inputline, inputsig);
            Console.ReadKey();

        }
    }
}
回复 支持 反对

使用道具 举报

该用户从未签到

34#
发表于 2007-2-5 10:37:56 | 只看该作者

总结和说明

有些人看了代码可能会说不是题目要求请尽量避免使用框架类库吗?注意我这里使用的类库如string.empty,string.length其实都是非常简单的,可以用for循环和null值(或者"")来代替.至于动态数组和哈希表,也是可以另外写一个类来自定义的.不过这些都是c#里面最基本的指令.就好像c++的cout一样平常.单位考察的重点代码包括了,这些小地方可以提高效率何乐而不为呢?
另外我以前也用c++多.工作了两个月了,用了一个月的c#.微创是微软的子公司吧?(工作语言是c#)反正以前旁边坐过一个微创的哥们.测试的,每天用c#写自动化代码.挺强的~
回复 支持 反对

使用道具 举报

该用户从未签到

35#
发表于 2007-2-5 16:41:59 | 只看该作者
看不太懂,是C++,还是C#写的?晕了~~~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

36#
发表于 2007-2-5 17:34:12 | 只看该作者
应该是C#,不知道这位老兄为什么在这写开代码了?
难道你没有开发环境?嘎嘎...
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2007-2-5 17:36:56 | 只看该作者
我不是说的很清楚么,我来解答题目,顺便完成51对学员50帖回复的目标~~sdlkfj1
回复 支持 反对

使用道具 举报

该用户从未签到

38#
发表于 2007-2-5 18:37:39 | 只看该作者
楼上的还有这个目标啊

嘿嘿
回复 支持 反对

使用道具 举报

该用户从未签到

39#
发表于 2007-2-5 18:50:48 | 只看该作者
回35楼的,我说过用c#了呀,就是可以直接在vs2003以上版本编译通过的。其实仔细看看除了声明数组,函数不一样以外,其他也差不多。
回楼上的,是的呀。每个人至少要在版上回50帖。否则id特权不保。灌水太没劲了,我就解答题目了呀。还剩4帖,加油!!
回复 支持 反对

使用道具 举报

该用户从未签到

40#
发表于 2007-2-6 10:29:40 | 只看该作者
好难哦,看不懂~
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-13 18:39 , Processed in 0.076731 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表