寻找真正对算法感兴趣的.Net程序员

绿色夹克衫 2010-05-04 12:00:13
加精
.Net程序员一般不会太重视算法问题,因为工作中很少有机会用到,相比之下需求分析和构架设计的能力更为重要。反过来讲,算法能力也不能完全代表编程水平,更不能代表解决实际问题的能力。
但相信只要有程序员的地方,就会有人对算法感兴趣,即使在.Net版,也会有不少乐于思考某些不切实际问题的同志。
附一些实际工作中绝不会遇到的问题,大家可以测试一下自己对于这类问题的应对能力。

入门

1、一个长为10万的数组A,给出100万对下标i和j,其中i为起始下标,j为结束下标,j >= i,计算A[i]+A[i + 1] + ..... A[j](将这100万次计算结果存在数组)
2、共有40级台阶,每一步可以上1级,也可以上2级,问上这40级台阶共有多少种不同的走法
3、写段程序计算两个自然数A和B的最小公倍数

初级

1、123456789的阶乘后面有多少个0?
2、123456789的123456789次方 % 987654321 = ?
3、输出由1223334444打乱顺序后组成的所有数。
例如:1234234344

一级

1、100元钱换零钱(50、20、10、5、2、1元,5、2、1角),共有多少种不同的方法(只求数量即可,不用求全部解,经常出现的问题)
2、设数组A包括了全部由A-O组成的长为15的字符串,A-O各出现一次,并且数组A是有序的(第一个元素是ABCDEFGHIJKLMNO,最后一个元素是OMNLKJIHGFEDCBA),随便给出一个数组A中的字符串,输出他在A中的位置,例如ABCDEFGHIJKLMNO,输出0,OMNLKJIHGFEDCBA输出1307674367999)
3、输出所有8皇后问题的解,需要注意的是,某些解可以通过其他解旋转90,180,270度而获得,这样的解只算1个(需要去掉重复)。

二级

1、有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占R[i]个空间,储存计算结果则需要占据O[i]个空间(其中 O[i]<R[i])。问怎么安排这n个请求的顺序,使得所有请求都能完成。你的算法也应该能够判断出无论如何都不能处理完的情况。比方说,m=14,n=2,R[1]=10,O[1]=5,R[2]=8,O[2]=6。在这个例子中,我们可以先运行第一个任务,剩余9个单位的空间足够执行第二个任务;但如果先走第二个任务,第一个任务执行时空间就不够了,因为10>14-6。(其实是Google的一个笔试题,会者不难,难者不会)
2、两个长为100万的数组A和B,A和B中的元素都满足0 < A[i] B[i] < 2^31,用数组A中的元素和数组B中的元素两两相乘,得到数组C(A[0] * B[0],A[0] * B[1],A[0]*B[2] ......A[1] * B[0],A[1] * B[1]......A[999999] * B[999999]),C共有10^12个元素,现在随便给出一个数K,请你找出C中第K大的元素。
3、一个长为10万的数组A,给出100万对下标i和j,其中i为起始下标,j为结束下标,j >= i,找出A[i] - A[j]之间的最大值(将这100万次统计结果存在数组)。

涉及敏感词,再高一级的就不写了,如果你觉得以上问题都过于简单,请给我发私信索要更难的题目,或给我发一份简历,呵呵。
...全文
12567 452 打赏 收藏 转发到动态 举报
写回复
用AI写文章
452 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglei451 2010-10-08
  • 打赏
  • 举报
回复
一定要顶!
HuangHuiWeiAndy 2010-07-15
  • 打赏
  • 举报
回复
上楼梯那个题目:我用的二叉树来解。但是我如果把阶梯设为20的话就有52万多种,40根本算不出来,电脑都差点死了。谁能帮我检查一下,代码很简单。
// 上台阶.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
//声明树节点
typedef struct _Node
{
long int data;
struct _Node *left;
struct _Node *right;
} Node,*pNode;

int num=0;
int STEP=30;
int Next(pNode );
int _tmain(int argc, _TCHAR* argv[])
{
pNode node=(pNode)malloc(sizeof(Node));
node->data=0;

Next(node);
printf("\n\n\n总共有%d走法",num);
getchar();
return 0;
}

int Next(pNode pN)
{
int left=pN->data+1;
int right=pN->data+2;
if(left==STEP)
num++;
else if(left<STEP)
{
pNode lnew=(pNode)malloc(sizeof(Node));
pN->left=lnew;
lnew->data=pN->data+1;
Next(lnew);
}

if(right==STEP)
num++;
else if(right<STEP)
{
pNode lnew=(pNode)malloc(sizeof(Node));
pN->left=lnew;
lnew->data=pN->data+1;
Next(lnew);
}

return 0;
}
iCan.club 2010-05-16
  • 打赏
  • 举报
回复
靠 10说的对 哈哈 我太笨蛋了 用了好几天才发现10是正确的 不过我是从1.10.101.10110.10110101推出来的 哈哈 好兴奋啊 上高中的时候上课睡觉作业用了3天才推出来 后来老师说这个咱们上课讲过的啊 哈哈 自己用最笨蛋的方法做出来 依然好兴奋 有空再看其它题目了
浅陌 2010-05-16
  • 打赏
  • 举报
回复
顶了,学习算法~
饅頭 2010-05-15
  • 打赏
  • 举报
回复
算法,程序员的命根,恶补中……
anlge999999 2010-05-14
  • 打赏
  • 举报
回复
多维数法能算上真正算法么!不觉得片面么
janey31 2010-05-14
  • 打赏
  • 举报
回复
只是一个很是回帖的算法达人定你一次吧
xiangjm123 2010-05-13
  • 打赏
  • 举报
回复
自己离得太原了。
wenfeng1 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wowmboy 的回复:]
再做个入门的吧~
共有40级台阶,每一步可以上1级,也可以上2级,问上这40级台阶共有多少种不同的走法

这其实就是个斐波那契数列 1,2,3,5,8,13,~~~~~~~~~~
1.采用递归
public static int Result(int a)
{
if (a == 1 || a==2)
{
return a;
}
int res ……
[/Quote]
你好,算法还没有入门,能详细讲解一下算法思路吗?为什么是结果会是斐波那契数列呢?
cj413304161 2010-05-13
  • 打赏
  • 举报
回复
很是不错!加油
凤凰涅檠 2010-05-13
  • 打赏
  • 举报
回复
留个脚印~~~
a282514889 2010-05-13
  • 打赏
  • 举报
回复
好难哦
kesheng748 2010-05-13
  • 打赏
  • 举报
回复
不能沉,最近才开始研究算法!初哥啊!
zhwei1234 2010-05-13
  • 打赏
  • 举报
回复
不错谢谢
  • 打赏
  • 举报
回复
果然有很多高手
junshanhudazhaxi 2010-05-13
  • 打赏
  • 举报
回复
顶下............
ting7895566 2010-05-13
  • 打赏
  • 举报
回复
学习!
ljsheng 2010-05-13
  • 打赏
  • 举报
回复
写代码都没用到算法的地方..杯具
zhaoshuzi 2010-05-13
  • 打赏
  • 举报
回复
.net就不用费那脑经想算法方面的事了,怎么搞都慢的一坨
xlchun88 2010-05-13
  • 打赏
  • 举报
回复
不错,应该学习
加载更多回复(419)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧