【编程练习】最近准备开始找工作,这篇文章作为一个code练手题目的总结吧

找工作时候一般需要准备的算法题目类型,其实参考leetcode和poj或者剑指offer基本能够摆平大部分的题目了

1.图的遍历,BFS、DFS;

2.递归的回溯剪枝;

3.树的建立和遍历;

4.状态的二进制表示,如一列开关的状态,图某行的开关状态。

   数据结构:

1.图的表示:邻接矩阵、邻接表(比如:使用数组表示);

2.队列(BFS用,比如使用数组表示);

3.链表,可使用结构体数组表示;
   POJ上类似难度的题目:1011(DFS+回溯剪枝,地址:http://poj.org/problem?id=1011),

                                    1014(DFS),1256(回溯剪枝),1753(棋盘状态用16位二进制数表示)

                                    2312(图的遍历),2531(DFS),3278(BFS穷举),3984(图的遍历,DFS或BFS)。

  如果对解题方法有疑问,可以百度搜索:“poj + 题号”,如“http://www.baidu.com/baidu?wd=POJ+1011”。

1.穷举法题目例子

首先这个题目是找到方阵中,step = n的特定环的最大值:

只要穷举法就ok,写这个题目需要回顾两点,1,模仿poj的标准输入输出。2.二维数组传值,需要降维,这块下标的计算

样例输入:

2
4 3
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
3 3
0 0 0
0 0 0
0 0 0

输出:

92
0
// KDonuts.cpp : 定义控制台应用程序的入口点。
//

#include <stdio.h>
#include <malloc.h>

/*

To read numbers	int n;
while(scanf("%d", &n) != EOF)
{
  ...
}

To read characters	int c;
while ((c = getchar()) != EOF)
{
	...
}

To read lines
char line[1024];
while(gets(line))
{
	...
}
*//////

//只是从当前x,y 坐标的一个环的sum
int getSum(int startX,int startY,int* array,int step,int nlength)
{
	int sum = 0;

	for (int i = startY;i < startY+step;i++)
	{
		sum = sum + *(array + startX*nlength + i);
		sum = sum + *(array + (startX +step-1)*nlength +i);
	}

	for (int j = startX; j< startX +step - 2;j++)
	{
		sum = sum + *(array+(j +1)*nlength + startY);
		sum = sum + *(array+(j +1)*nlength+ startY + step -1);
	}

	return sum;
}

int getMax(int nlength,int step,int* array )
{
	int maxsum = 0;

	for (int i = 0;i<=nlength-step;i++)
	{

		for (int j = 0;j<=nlength-step;j++)
		{
			int tmp = getSum(i,j,array,step,nlength);
			if (maxsum<tmp)
			{
				maxsum = tmp;
			}
		}
	}
	return maxsum;
}

int main()
{

	freopen("sample.in", "r", stdin);
	freopen("sample.out", "w", stdout);

	/* 同控制台输入输出 */

	int mainIndex = 0;
	scanf("%d",&mainIndex);

	for (int i = 0; i < mainIndex;i++)
	{
		int step = 0;
		int N = 0;
		scanf("%d %d",&N,&step);
		// 下面申请内存时候要用sizeof不然free时候会算错导致堆出错
		int *array = (int*)malloc(sizeof(int)*N*N);
		for (int j = 0;j<N*N;j++)
		{
			scanf("%d",array+j);
		}
		printf("%d\n",getMax(N,step,array));

		free(array);
	}

	fclose(stdin);
	fclose(stdout);

	return 0;
}

2.各大公司最常考的题目:关于单链表的逆置

// LinkListReverse.cpp : 定义控制台应用程序的入口点。
//

#include<stdio.h>
//#include<stdlib.h>
#include <malloc.h>
/*链表节点定义*/
typedef struct Lnode
{
	int data;
	struct Lnode *next;
}Lnode, *LinkList;         //定义节点,头指针类型名

/*尾插法创建单链表*/
void Create_LinkList_B(LinkList &L)
{
	int x, cycle = 1;
	Lnode *p, *s;
	L=(LinkList)malloc(sizeof(Lnode)); //生成头结点
	L->next = NULL;
	p=L;
	while(cycle)    //循环接受输入节点数据,-1结束输入
	{
		printf("x = ?\n");
		scanf("%d", &x);
		if(x != -1)
		{
			s=(Lnode *)malloc(sizeof(Lnode)); //生成新节点
			s->data = x;
			p->next = s;        //把新节点插入链表尾部
			p = s;	        	//p指针再次指向尾节点
		}
		else
		{
			cycle = 0;    //输入-1,改变循环变量,不接受新节点
		}

	}
	p->next = NULL;
}

/*单链表的逆置,针对有头节点的情况 ,没有头节点的情况另外补上一个头结点*/
void Reverse_LinkList(LinkList &L)
{
	if( (NULL==L)||(NULL==L->next) )return ;  //边界检测
	Lnode *pre, *q;//pre节点一直作为去掉头结点的链表的首节点,q作为保存pre的临时节点
	pre = L->next;    //P指向链表第一个元素
	L->next = NULL; //断开头结点与链表
	while(pre != NULL)
	{
		q = pre;
		pre = pre->next;
		q->next = L->next;  //相当于前插法构建新的链表,和原来的相反
		L->next = q;
	}
}
//单链表逆置的递归写法:
void ReverseList(LinkList& pCur,LinkList& ListHead)
{
	if( (NULL==pCur)||(NULL==pCur->next) )
	{
		ListHead=pCur;
	}
	else
	{
		LinkList pNext=pCur->next;
		ReverseList(pNext,ListHead); //递归逆置后继结点
		pNext->next=pCur;            //将后继结点指向当前结点。
		pCur->next=NULL;
	}
}

/*打印单链表*/
void Print_LinkList(LinkList &L)
{
	Lnode* p;
	p = L->next;		//L是头指针,p指向第一个节点,开始打印
	while(p != NULL)
	{
		printf("%d\n", p->data);
		p = p->next;
	}
}

/*测试函数*/
int main()
{
	LinkList H;	  //声明头指针
	Create_LinkList_B(H);
	printf("现在开始打印链表\n");
	Print_LinkList(H);

	printf("-----逆置之后的链表-----\n");

	Reverse_LinkList(H);
	Print_LinkList(H);
	printf("-----逆置之后的链表-----\n");
	ReverseList(H,H);
	Print_LinkList(H);
	return 0;
}

这个哥们的代码基本可以作为标准答案了:

http://blog.csdn.net/heyabo/article/details/7610732

时间: 2024-09-03 12:51:00

【编程练习】最近准备开始找工作,这篇文章作为一个code练手题目的总结吧的相关文章

2014找工作总结 - 机会往往是留给有准备的人

转载自http://blog.csdn.net/xiajun07061225/article/details/12844801 其实我的求职过程在十一之前就已经结束了,总体讲比较顺利.参加面试的几家公司基本都拿到了offer,分别是阿里巴巴.美团网.创新工场涂鸦移动以及华为.当时也参加了其他公司的面试,比如人人,一面过后收到了二面通知,拒了.创新工场豌豆荚一面结束后等消息.十一过后的公司基本都是酱油而过.去哪儿面试拒了.腾讯一面后收到了二面的通知,也拒了.主要是因为自己已经拿到了理想公司的o

什么时候去深圳找工作机会比较多

问题描述 最近在老家辞职了,打算去深圳找工作.但不知道深圳的情况怎么样.请教了一些朋友.大家回答都不一样.有些朋友说,年前去深圳找工作比较好,因为年前人事会重新安排,项目计划也会在年前做好,过了年就要进入工作状态了,所以年前去深圳比较好.也有朋友这样说.大家都等年终奖,所以年前不会离职,工作机会比较少,年后的3-4个星期是找工作的黄金时间.我虚心请教在深圳的朋友们,什么时候去深圳比较合适.我一直在老家做java开发,属于软件作坊,就2个人做开发.有2年的开发经验,一直使用公司自己框架.这段时间在

亲爱的程序猿们怎么找工作

神秘的刀郎在 2003 年成名,成名歌曲是<2002年的第一场雪>. "2002年的第一场雪,来得比往年要晚一些.停靠在八楼的二路汽车,带走了最后一片飘落黄叶.--" 正是在 2002 年,我大学毕业,找了份售后技术支持的工作. 2003 年的时候,奔波在河北维护程控交换设备,我们破旧的桑塔纳里,经常传来刀郎沙哑的嗓音. 好吧,我承认,这篇文章与刀郎没有半毛钱关系.可是当年红遍大江南北的刀郎,现在已经找不着了吧. 人无千日好,花无百日红.早时不计算,过后一场空.这首诗又是干

为什么找工作这么难,好难过

问题描述 找工作好难找呀,都找半个月了,我之前是普工,没有工作经验,凭着对编程的热爱,一直自学.net的,网上投了简历,都没怎么回信的,今天好不容易有个面试,一个关于委托的题目给难住了,说回去等通知,感觉自己也不笨的,但是技术还是很一般,钱也没了,好辛酸,好想哭! 解决方案 解决方案二:就没人要我吗,就没人给个机会吗?解决方案三:开始都这样,继续找吧解决方案四:.NET的东西入门容易,但易学难精,多挖掘内部原理吧,别停留在表象,像委托这些基础语法很重要.解决方案五:问一下自己你可以给公司创造什么

找工作

问题描述 暑假找工作好找吗? 解决方案 解决方案二:还是先谈下寒假吧解决方案三:.......解决方案四:.....................解决方案五:年底跳槽的人多解决方案六:金三银四楼主自己领悟.解决方案七:先过年完了再说解决方案八:看自个了.解决方案九:........解决方案十:我也想找解决方案十一:工作好找!好工作难找..解决方案十二:我也在找工作啊解决方案十三:记得曾经以为自己会的不少的时候,暑假去打工,非找个编程相关的不行.

关于网页设计师的职业规划和找工作问题

关于网页设计这个行业,在中国来讲这个行业并不成熟,这个跟国家的经济,文化修养有密切的关系.我们不能跟欧美和韩国相比,他们有强大经济实力,设计这个东西,只有在经济蓬发的时代或在经济发达的城市才能产生价值.设计是推动市场营销的生产力,只要是视觉设计类,都有一个共同的目地,传达信息为商业服务.网页设计也是如此.如何在这个混乱的市场中,站住脚跟,向下一步迈进.请看下面文字. 一.职能规划 恩,第一节,我们先讲职能规划.首先自己要有明确的目标和定位,这样后面的路才好走.光网页设计其实分的非常细致.因为各个

给网页设计师求职找工作指路

位大家好!很荣幸能在这里和大家聊聊!(*^__^*)嘻嘻--此处省略488字,切入正题. 关于网页设计这个行业,在中国来讲这个行业并不成熟,这个跟国家的经济,文化修养有密切的关系.我们不能跟欧美和韩国相比,他们有强大经济实力,设计这个东西,只有在经济蓬发的时代或在经济发达的城市才能产生价值.设计是推动市场营销的生产力,只要是视觉设计类,都有一个共同的目地,传达信息为商业服务.网页设计也是如此.如何在这个混乱的市场中,站住脚跟,向下一步迈进.请看下面文字. 一.职能规划 恩,第一节,我们先讲职能规

it找工作求职面试技巧

求职面试技巧       这个市场状况对于大多数DBA来说当然是个好消息,但是它不能看作是一个新的高薪工作的免费门票.具有高学历不意味着你所要作的就只是提交你的简历然后等着被聘用.你仍然需要为了落实下一个工作而去遵循基本的商业规则.换句话说,你需要返回到基础原则并通过遵循这些原则来获得这个工作.                      一.简历 在简历中需要注意的几个关键元素:       求职信--这仍然是绝对必须有的!表达你为什么对这个职位感兴趣和你为什么觉得你适合这个职位.从你的简历中复

高中学历自学android,做出这样的软件,可以找工作吗

问题描述 高中学历自学android,做出这样的软件,可以找工作吗 感觉做出来啥感觉没有,就是数据库,解析json,绑定控件什么的,没什么技术 解决方案 第一,学历并不是什么问题,重要的是有技术,做多几个项目吧,最好是不同类型的 第二,要重视基础,必要的时候去一些上一些培训班深造一下吧~ 第三,如果你是刚高三毕业没多久,我建议你还是去上个技校(中专)什么的吧~~ 解决方案二: 可以找金融公司绘制k线图了,呵呵 解决方案三: 也可试着找.边工作边学习也是可以得.加油哦 解决方案四: 工作都可以找阿