创新工场2014笔试编程题答案

昨天笔试了创新工场的软件工程师,前面是10道选择题,后面是三道编程题。本人将三道编程题的程序贴出,供大家参考,如有错误敬请指正

PS:今天上午去了面试,准备了好多优化的算法的程序,但是都没用上,只问了一个归并排序就结束了,死的比较惨

编程题

1. 堆排序

#include<iostream> 
usingnamespace std; 

void SwapValue(int &m, int &n)
{
	int temp = m;
	m = n;
	n = temp;
}
void max_heap(vector<int> &vec, int i, int heap_size)
{
	int l = 2*i;
	int r = 2*i+1;
	int largest = i;
	
	if(l<=heap_size && vec[l-1]>vec[largest-1])
		largest = l;
	if(r<=heap_size && vec[r-1]>vec[largest-1])
		largest = r;

	if(largest!=i)
	{
		SwapValue(vec[largest-1],vec[i-1]);
		max_heap(vec, largest, heap_size);
	}
}
void heapSort(vector<int> &vec)
{
	int heap_size = vec.size();
	for(int i=heap_size/2; i>=1; i--)
		max_heap(vec, i, heap_size);
	for(int i=heap_size; i>=1; i--)
	{
		SwapValue(vec[0],vec[i-1]);
		max_heap(vec, 1, i);
	}
}
void print(vector<int> vec)
{
	for(int i=0; i<vec.size(); i++)
		cout<<vec[i]<<" ";
	cout<<endl;
}

int main()
{
	vector<int> vec;
	vec.push_back(23);
	vec.push_back(5);
	vec.push_back(1);
	vec.push_back(10);
	vec.push_back(13);
	vec.push_back(32);
	vec.push_back(21);
	vec.push_back(14);
	vec.push_back(19);
	vec.push_back(20);
	
	cout<<"排序前: "<<endl;
	print(vec);
	
	heapSort(vec);
	
	cout<<"排序后: "<<endl;
	print(vec);
	return 0;
} 


2. 求一个正整数N的开方,要求不能用库函数sqrt(),结果的精度在0.001
解析:牛顿迭代

#include<iostream>
using namespace std;
int main()
{
    int N;
    cout<<"输入N的值:";
    cin>>N

    double x1 = 1;//初值
    double x2 = x1/2.0+N/2.0/x1;
    while( fabs(x2-x1)>0.001)
    {
        x1 = x2;
        x2 = x1/2.0+N/2.0/x1;
    }
    cout<<x1<<endl;

    return 0;
}


3. 给定一个矩阵intmaxtrixA[m][n],每行和每列都是增序的,实现一个算法去找矩阵中的某个元素element.

#include<iostream>
using namespace std;

const int M = 4;
const int N = 4;
int main
{
    int matrix[M][N] = {};
    double element;
    
    int flag = 1;
    for(int j=0; j<N; j++)
    {
        if(matrix[i][j] == element)
            cout<<"位置"<<endl;
        while( flag<M && matrix[i][j]<element )
            --flag;
        while( flag<M && matrix[i][j]>element )
            ++flag;
    } 
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值