[原]网易招聘面试题

楚东方 16/08/02 21:48:55

1.题目大意:牛牛制作材料,50行  每行不超过50 个单词(大写,空格隔开),求不同的材料为多少?

样例:BUTTER     FLOUR    HONEY    FLOUR   EGG

输出:4


水题

代码:

/*************************************************************************
	> File Name: wangyi1.cpp
	> Author:chudongfang 
	> Mail:1149669942@qq.com 
	> Created Time: 2016年08月02日 星期二 19时30分54秒
 ************************************************************************/

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
char str[300][55];

int main(int argc,char *argv[])
{
    int re = 0,i;
    int count =0 ;
    while(scanf("%s",str[count]) != EOF)
    {
        for(i=0;i<count;i++)
        {
            if(strcmp(str[i],str[count]) == 0)
                break;
        }
        if(i == count )  re++;
        count++;
    }
    printf("%d",re);
    return 0;
}

2.牛牛分土地, 行割三刀,列割三刀,分为16份,牛牛只能取最小的那一份,一种分割方式,使得牛牛分得的土地最大?

样例:

4 4 (代表行数和列数)

3 3 3 2

3 2 3 3 

3 3 3 2 

2 3 2 3

样例输出:

2


思想,先递归确定切的6条边界,,然后计算比较,简单来说就是暴力求解。

先上代码:可能有不足和错误之处,请多多指教!

/*************************************************************************
	> File Name: wangyi.cpp
	> Author:chudongfang 
	> Mail:1149669942@qq.com 
	> Created Time: 2016年08月02日 星期二 19时27分27秒
 ************************************************************************/

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;

typedef long long ll;
int getmin(int ordern[],int orderm[]);

int fenzhi(int ordern[5],int orderm[5],int i,int j,int x1,int x2);
int maxx=-1;
int num[80][80];
int n,m;
int main(int argc,char *argv[])
{
    int ordern[5];
    int orderm[5];
    int i,j;
    memset(num,0,sizeof(num));
    scanf("%d %d",&n,&m);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            scanf("%d",&num[i][j]);

    ordern[0] = 1;
    ordern[4] = n+1;
    orderm[0] = 1;
    orderm[4] = m+1;
    fenzhi(ordern,orderm,2,2,1,1);
    
    printf("%d",maxx);
    return 0;
}
//i代表行,j代表列
int fenzhi(int ordern[5],int orderm[5],int i,int j,int x1,int x2)
{
    int k,l;
    if(i>n || j>m ||x1>4 || x2>4) //跳出边界 
        return 0 ;
    if(x1 == 4 && x2 == 4)
    {
        int t= getmin(ordern,orderm);
        if(maxx < t)    //更新最大值
            maxx = t;
        return 0;
    }
    for(k=i;k<=n;k++)
    {
        for(l=j;l<=m;l++)
        {
            ordern[x1] = k;
            orderm[x2] = l;
            fenzhi(ordern,orderm,k+1,l+1,x1+1,x2+1);
        }
    }
    return 0;
}
//根据边界求解。
int getmin(int ordern[],int orderm[])
{
    int sum =0 ;
    int min1=INF;
    int i,j,k,l,x,y;
    for(x=1;x<=4;x++)
    {
        for(y=1;y<=4;y++)
        {
            sum=0;
            for(i=ordern[x-1];i<ordern[x];i++)
            {
                for(j=orderm[y-1];j<orderm[y];j++)
                {
                    sum+=num[i][j];
                }
            }

            if(min1 > sum && sum != 0)  min1= sum;
        }
    }
    return min1;
}





作者:chudongfang2015 发表于2016/8/2 21:48:55 原文链接
阅读:37 评论:0 查看评论