博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
公司笔试题
阅读量:6907 次
发布时间:2019-06-27

本文共 2789 字,大约阅读时间需要 9 分钟。

    去年2月份的时候刚来深圳,在第一家公司面试,也是我现在所在的公司.当时主管给我做了一套笔试题,结果不是很理想,当时我还特意写了篇博文:

被录用之后,我找主管要了一份当时的笔试题,又重新做了次.昨天偶然发现了这张试题,算是对自己的一个回顾.

   主要是2道算法题和1道sql题,当时确实很菜,算法题有错误,而sql全挂,也感谢老大把这么菜的我招到麾下,让我磨练至今.当然现在我的sql依然很菜,确实不太有兴趣研究数据库.

算法题1:以C#或JavaScript语言实现一个斗地主的发牌算法.(都地主发牌规则:共54张牌,3人打,没人发17张,剩余3张.)

PS:其实我以前没玩过斗地主,后来才知道怎么玩.当然还是不怎么喜欢玩:)

我理解这个题,就是把54张牌先预制好,然后打乱顺序,依次发给3个玩家.最核心的应该是洗牌的算法.我的思路是:

1.生成一个长度为54的数组.为数组赋上初值1~54.

2.在1~54中生成一个随机数.

3.把这个数的位置与数组最后一位交换.

4.依次递减数组长度.直到长度为0.

static void Shuffle(int[] cards)    {        int length = cards.Length-1;        int index = length;        Random r = new Random();        while(index>0)               {            int rand = r.Next(index);            int tmp = 0;            tmp = cards[rand];            cards[rand] = cards[index];            cards[index] = tmp;            index--;        }    }

发牌时初始化1个2维数组,行列分别为4,17.然后依次发牌,知道剩余3张放入数组.

完整代码如下:

using System; class ctest{    static void Main()    {        int[] cards = new int[54];        int[,] persons = new int[4,17];//3人和剩余;        for(int i = 0;i
0) { int rand = r.Next(index); int tmp = 0; tmp = cards[rand]; cards[rand] = cards[index]; cards[index] = tmp; index--; } } static void print(int[] mat) { for(int i = 0;i
< 4; i++) { for(int j = 0;j<17;j++) Console.Write(persons[i,j]+" "); Console.WriteLine(); } } }

 

算法题2:以C#或JavaScript语言实现方法,计算参数(m)的表达式1+2-3+4-5...m的值.

这个题其实很简单,就是偶数符号的变化.

class test{static void Main(){    Console.WriteLine(CalculateSum(6));    Console.Read();} static int CalculateSum(int m){    int sum = 1;     for(int i = 2 ; i <= m; i++)     {        if(i%2==0)            sum+=i;        else            sum-=i;     }     return sum;}}

 

数据库题:SqlServer2005,表DataTable

id  value
1 1
2 1
5 2
6 2
8 3
9 3

 

1.将左表中的数据,按id排序,每两行一组求value的和,生成一张新的视图.

2.按id排序,取得所有的奇数(单数)行value之和.

3.取得所有id为奇数的行value之和.

从题目可以看出难度依次降低.

首先建表:

CREATE TABLE [dbo].[DataTable](

[Id] [int] NULL,
[Value] [int] NULL
) ON [PRIMARY]

 

3.SELECT SUM(Value) SumValue FROM DataTable dt WHERE id%2=1

2.SELECT SUM(m.value) SumValue FROM (

SELECT ROW_NUMBER() OVER(ORDER BY id) row,id, VALUE FROM

DataTable dt) m WHERE m.row%2=1

1.只能想到这种取出值插入表的方式,使用rownum也好,使用游标也好.

CREATE TABLE #temp(SumValue INT)

DECLARE @count INT,
@index INT = 1,
@l INT = 1,
@value INT
SELECT @count=COUNT(*) FROM DataTable dt
WHILE(@index<=@count)
BEGIN
SELECT @value = SUM(dt.VALUE) FROM (
SELECT ROW_NUMBER() OVER(ORDER BY id) row,id, VALUE FROM
DataTable) dt WHERE dt.row BETWEEN @l AND @l+1
INSERT INTO #temp(SumValue)VALUES(@value)
set @index=@index*2
SET @l=@index+1
END
SELECT * FROM #temp t

 

小公司,简单的题目.这应该算泄题了:)

转载于:https://www.cnblogs.com/kulong995/p/3416880.html

你可能感兴趣的文章
面向物联网的几大开源操作系统
查看>>
百度分享按钮代码
查看>>
openCV vs2013配置
查看>>
Resin优化方案
查看>>
GC参数整理
查看>>
前后端常见的几种鉴权方式
查看>>
Oracle11g DMP 文件导入到 10g
查看>>
双网卡同时使用配置
查看>>
恢复密码
查看>>
20180504早课记录03-Linux
查看>>
11.交换路由远程管理
查看>>
GIT命令
查看>>
rip路由协议基本配置
查看>>
守护进程 python
查看>>
搭建FTP
查看>>
Entity Framework 的事务 DbTransaction
查看>>
Java Service Wrapper简介与使用(转)
查看>>
马哥学习----李洋个人笔记-----rpm包管理器
查看>>
Apache与Nginx的优缺点比较
查看>>
【Linux】Install Redis on Centos
查看>>