算法 64式 20、其他算法整理

1 算法思想

其他算法主要是指不明显属于下面类别的算法:

递归,回溯,分治

贪心,搜索,动态规划

链表,队列,栈

树,图,排序

数组,字符串,排列组合

大数据,数学,奇门遁甲

故划分到其他这个类别

 

 

2 其他系列

类别-编号

题目

遁去的1

来源

1

日期差值

求两个日志的相差天数,连续2天默认为一天。日期形式:YYYYMMDD

 

计算机考研—机试指南

https://blog.csdn.net/qingyuanluofeng/article/details/97749684

2

Day of week

算出一天是星期几

 

计算机考研—机试指南

https://blog.csdn.net/qingyuanluofeng/article/details/47159365

3

输出梯形

输入高度h,输出高为h,上底边为h的梯形

 

计算机考研—机试指南

https://blog.csdn.net/qingyuanluofeng/article/details/97749844

4

输入外挂

scanf快于 cin,在scanf基础上再次优化,使那些刚超时一点的程序能够卡金时限范围。

 

计算机考研—机试指南

https://blog.csdn.net/qingyuanluofeng/article/details/47186635

5

位运算

 

计算机考研—机试指南

https://blog.csdn.net/qingyuanluofeng/article/details/47186617

6

赋值运算符

如下为类型CMyString的声明,请为该类型添加赋值运算符函数。

class CMyString

{

public:

CMyString(char* pData = NULL);

CMyString(const CMyString& str);

private:

char* m_pData;

};

 

剑指offer

https://blog.csdn.net/qingyuanluofeng/article/details/39091985

7

实现Singleton模式

设计一个类,只能生成该类的一个实例

 

剑指offer

https://blog.csdn.net/qingyuanluofeng/article/category/2544591/3?

8

逻辑推理之警察抓小偷

警察局抓了a,b,c,d四名嫌疑犯,其中只有一人是小偷。审问中:

a说:"我不是小偷"

b说:"c肯定是小偷"

c说:"小偷肯定是d"

d说:"c在冤枉人"

请推断谁是坏人

 

算法设计与分析

https://blog.csdn.net/qingyuanluofeng/article/details/47189061

9

预测分数

三维老师对某次学生竞赛进行了预测,他们预测如下:

甲说:学生A得第一名,学生B得第三名

乙说:学生C得第一名,学生D得第四名

丙说:学生D得第二名,学生A得第三名

竞赛结果表明,它们各说对了一半,说错了一半,并且无名次并列。试编程输入:a,b,c,d各自的名次

 

算法设计与分析

https://blog.csdn.net/qingyuanluofeng/article/details/47189077

10

让CPU占用率曲线听你指挥:

写一个程序,让用户来决定Windows任务管理器的CPU占用率。实现下面的要求:

1 CPU的占用率固定在50%,为一条直线

2 CPU的占用率为一条直线,具体占用率由命令行参数决定(参数范围1~100)

3 CPU的占用率状态是一条正弦曲线

CPU的占用率 = CPU忙的时间(执行程序)/刷新周期总时间

System Idle Process占用了CPU空闲的时间

进程进入等待状态:等待输入,等待某事件的发生,主动进入休眠状态

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/39272847

11

电梯调度算法:

微软有6部电梯,每层都有人上下,电梯在每层都停。

每次电梯从一层往上走时,只允许电梯停在其中的某一层。所有的乘客都从一楼上电梯,到达某层后,电梯停下来,

所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则自动计算出应停在

的楼层。

电梯停在那一层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/39273073

12

双线程高效下载:

下载一块数据,写入硬盘,然后再下载,再写入硬盘,不断重复这个过程,直到所有的内容下载完毕为止。能否对此进行优化?

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/39273169

13

一排石头的游戏

N块石头排成一行,每块石头有各自固定的位置,两个玩家依次取石头,每个玩家可以取其中任意一块石头,或者
相邻的两块石头,石头在游戏过程中不能移位(即编号不会改变),最后能将剩下的石头一次取光的玩家获胜。

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/39273187

14

拈石游戏分析:

有N块石头和两个玩家A和B,玩家A先将石头分成若干堆,然后按照BABA...的顺序不断轮流取石头,能将剩下的石头一次取光的玩家获胜。每次取石头的时候,每个玩家只能从若干堆石头中任选一堆,取这一堆石头中任意数目

(大于0)个石头。

问:玩家A要怎样分配和取石头才能保证自己有把握取胜?

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/39273213

15

NIM两堆石头的游戏:

假设有两堆石头,有两个玩家会根据如下的规则取石头:

没人每次可以从两堆石头中各取出数量相等的石头,或者仅从一堆石头中取出任意数量的石头;

最后把剩下的石头一次拿光的人获胜。

对于数量分别为1和2的两堆石头,取石头的第一个玩家必定会输掉游戏,因为它要么只能从任意一堆石头中取出一块石头,要么只能从两堆中各取出一块石头。

但无论采用哪种方式取,最后剩下的石头恰好能被第二个玩家取完。

定义函数如下:

bool nim(n,m)//n,m分别是两堆石头的数量,要求返回布尔值,表明首先取石头的玩家是否能赢得这个游戏

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/39273237

16

连连看游戏设计
主要包含游戏局面的状态描述,游戏规则的描述:状态的合法转移(哪些操作满足规则,经过这些操作,达到哪些状态)。自动机模型适合描述游戏设计。

如何求出相同图形之间的最短路径,最短路径的转弯数目最少,转弯数目最少时,经过格子数目尽可能少。

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/39273255

17

俄罗斯方块游戏:

1玩家操作:90度旋转积木块,左右移动积木块,让积木加速落下

2积木落到最下方或则在其他积木上无法移动时,会固定在该处,新的积木落下

3某行格子全部填满,该行小时,并成为玩家得分。一次删除的行越多,的扥越多

4积木堆积到区域上方,游戏结束

 

1如何用数据结构表示游戏的各种元素?如每个可活动的积木,在底层的积木

2现在已经知道底层积木的状态,然后在游戏区域上方出现新的积木,如何移位?

3有预览窗口时,可看到积木什么新装。比如下一个积木是长条时,就不要把最深的峡谷堵住。有了该新参数,如何改写程序?

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/47186969

18

程序理解和时间分析

不用电脑的帮助,回答下面的问题:

1. 这个程序要找的是什么条件的数?
2. 这个数存在么?符合这一条件的最小的数是什么?
3. 在电脑商运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分钟(单核CPU2.0Hz)

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/47187471

19

程序改错:

找出一个有序字符串数组arr中值等于字符串v的元素的序号,如果有多个元素满足这样的条件,则返回其中序号最大的

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/47187737

20

三角形测试用例:

输入三角形的三条边长,判断是否能构成一个三角形(不考虑退化三角形,即面积为0的三角形),是什么样的三角形(直角,锐角,钝角,等边,等腰)

函数声明:byte GetTriangleType(int,int,int)

1如何用一个byte来表示各种输出情况

2如果你是一名测试工程师,应如何写测试用例来完成功能测试?

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/47187955

21

数独知多少

如图是一个已经完成的数独,图中每一行,每一列和九个3*3的小矩阵都没有重复的数字出现。

下图是另一个填好的数独。

 

问题:

一共有多少种不同的数独解答呢?其中有多少种是独立的解答呢?

如果我们要用一个简单的字符串来表示各种数独,例如"125864...685219",如何保证一一对应的基础上,让字符串的长度最短?

 

独立的解答到底是什么?如何定义独立这种关系。

如果任意交换数独的两个数字,仍然是一个合法的数独。

定义:如果两个数独的解答可以通过交换任意两个数字,而仍然是合法数独,那么他们就不是独立的。

每个数独解答都可以通过上述转化,而转化为标准型:

1 2 3

4 5 6

 

编程之美

https://blog.csdn.net/qingyuanluofeng/article/details/47187977

22

编写一个智能指针类。智能指针是一种数据类型,一般用模板实现,模拟指针行为,同时还提供自动垃圾回收机制。它会自动记录SmartPointer<T*>对象的引用计数,一旦T类对象的引用计数为零,就会释放该对象。

 

程序员面试金典

https://blog.csdn.net/qingyuanluofeng/article/details/54426127

23

编写对齐的malloc和free函数

编写支持对齐分配的malloc和free函数,分配内存时,malloc函数返回的地址必须能被2的n次方整除

 

程序员面试金典

https://blog.csdn.net/qingyuanluofeng/article/details/54554921

24

用C编写一个my2DAlloc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保可通过arr[i][j]访问该内存。

 

程序员面试金典

https://blog.csdn.net/qingyuanluofeng/article/details/54559819

25

设计一个算法,判断玩家是否赢了井字游戏

 

程序员面试金典

https://blog.csdn.net/qingyuanluofeng/article/details/54565870

26

珠玑妙算游戏的玩法如下。

计算机有4个槽,每个槽坊一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如计算机可能有RGGB四种(槽1位红色,槽2、3位绿色,槽4位蓝色)。作为用户,你视图猜出颜色组合。打个比方,你可能会猜YRGB。要是猜对某个槽的颜色,则算一次“猜中”;要是只猜对颜色但槽位猜错了,则算一次“伪猜中”。注意:猜中不能算入伪猜中。

举个例子,实际有颜色组合为RGBY,而你猜的是GGRR,则算一次猜中,一次伪猜中。

给定一个猜测和一种颜色组合,编写一个方法,返回猜中和伪猜中的次数。

 

程序员面试金典

https://blog.csdn.net/qingyuanluofeng/article/details/54574806

27

给定一个整数,打印该整数的英文描述(例如 "One Thousand,Two Hundred-Thirty Four")

 

程序员面试金典

https://blog.csdn.net/qingyuanluofeng/article/details/54577566

28

Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.

For example,

123 -> "One Hundred Twenty Three"

12345 -> "Twelve Thousand Three Hundred Forty Five"

1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

分析:

这是程序员面试金典的一道题目。

 

Leecode

https://blog.csdn.net/qingyuanluofeng/article/details/57083627

29

Nim Game

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.

分析:这里就是拿石游戏。每次可以拿掉1或2或3块石头,谁最后拿光石头,

谁是胜利的。

 

Leecode

https://blog.csdn.net/qingyuanluofeng/article/details/57416887

30

Bulb Switcher

There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it's off or turning off if it's on). For the ith round, you toggle every i bulb. For the nth round, you only toggle the last bulb. Find how many bulbs are on after n rounds.

Example:

Given n = 3.

At first, the three bulbs are [off, off, off].

After first round, the three bulbs are [on, on, on].

After second round, the three bulbs are [on, off, on].

After third round, the three bulbs are [on, off, off].

So you should return 1, because there is only one bulb is on.

分析:此题初始的时候,灯是熄灭的。然后第一次,对1的倍数的灯都执行操作,

第二次对2的倍数的灯都执行操作,..第n次对n的倍数的灯都执行操作,

问第n次操作结束后,亮着的灯的个数。

 

Leecode

https://blog.csdn.net/qingyuanluofeng/article/details/58620385

31

如何判断还有几盏灯亮着

100个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个,即排在偶数的灯泡被关掉,第三轮每隔两个灯泡,将开着的灯泡关掉,关掉的打开。

依次类推,第100轮结束的时候,还有几盏灯亮着?

 

Python程序员面试算法宝典

https://blog.csdn.net/qingyuanluofeng/article/details/97181536

32

逆序输出

读入一些整数,逆序输出到一行中。已知整数不超过100个

 

算法竞赛入门经典

https://blog.csdn.net/qingyuanluofeng/article/details/47416729

33

开灯问题

有n盏等,编号为1~n。第一个人把所有灯打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯)

将被打开,开着的灯将被关闭,依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k<=n<=1000

输入:7 3

输出:1 5 67

 

算法竞赛入门经典

https://blog.csdn.net/qingyuanluofeng/article/details/47416781

34

蛇形填数

在n*n方阵里填入1,2,...,n*n。要求填成蛇形。例如n=4时方阵为:

10 11 12 1

9  16 13 2

8  15 14 3

7  6  5  4

上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n<=8

00          01          02          0,n-1

10          11          12          1,n-1

................

n-2,0      n-2,1      n-2,2      n-2,n-1

n-1,0      n-1,1      n-1,2      n-1,n-1

 

算法竞赛入门经典

https://blog.csdn.net/qingyuanluofeng/article/details/47416843

35

变量交换

 

算法竞赛入门经典

https://blog.csdn.net/qingyuanluofeng/article/details/47417089

36

WERTYU

把手放在键盘上时,稍不注意就会往右错移一位。这样的话,Q会变成W,

J会变成K等。电脑键盘如下图所示:

`  1234567890-=BackSP

TabQWERTYIOP[]\

A  SDFGHJKL;'Enter

Z  XCVBNM,./

Control Alt      Alt Control

输入一个错位后敲出的字符串,输出打字员本来想打出的句子。

输入:O S,GOMR YPSFU

输出:I AM FINE TODAY.

 

算法竞赛入门经典

https://blog.csdn.net/qingyuanluofeng/article/details/47417211

37

Tex

在Tex中,双引号是``,右引号是"。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式。

输入:

"To be or not to be," quoth the Bard,"that is the question".

输出:

``To be or not to be,'' quoth the Bard,``thar is the question."

 

算法竞赛入门经典

https://blog.csdn.net/qingyuanluofeng/article/details/47417245

38

6174问题

一个各位数字互不相同的四位数,把所有数字从大到小排序后得到a,从小到大排序后得到b,然后用a-b替换原来的数,并且继续操作。

例如,从1234触发,依次可以得到4321 - 1234 = 3087,8730 - 378 = 8352,8352 - 2358 = 6174。7641 - 1467  = 6174,回到了它自己。

输入一个n位数,输出操作序列,直到出现循环(即新得到的数曾经得到过)。输入保证在循环之前最多只会产生1000个整数。

输入:1234

输出:1234->3087->8352->6174->6174

 

算法竞赛入门经典

https://blog.csdn.net/qingyuanluofeng/article/details/47417321

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考:
[1]计算机考研--机试指南,王道论坛 组编
[2]剑指offer
[3]算法设计与分析
[4]编程之美
[5]程序员面试金典
[6]leecode
[7]Python
程序员面试算法宝典
[8]刘汝佳算法竞赛入门经典
[9]算法导论
[10]编程珠玑

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值