zoukankan      html  css  js  c++  java
  • 应聘经验——百田公司面试题记忆

        今年的三月二十八号,我有幸参加了百田公司在中南大学的宣讲会,并参加了笔试。虽然结果不是很令人满意,但通过这次面试提醒了我——程序高手必须重视算法,数据结构,操作系统的学习。这重拾了我对于算法的热情,故为避免遗忘特将题目记录如下。

        1.给出一个日期,计算其是该年的第几天

    int SumDay(int year, int month, int day)
    {
        int bMonth, sumDay;
        bool mYear = year%4;
        int i = mYear*1;
        bMonth = month/2;
        switch( month )
        {
            case 1:
            case 2:
                sumDay = 31 * bMonth + day ; //一二月另行计算;
                break;
            default:
                sumDay = bMonth * 31 + (bMonth -1)* 30 + (month%2) * 30 - 1 - mYear*1 + day;
                break;
        }
        return sumDay;
    }

    2.给定一个算式计算其值:如:输入“2 3 4 * +” 计算如下:(3 * 4)+2
    这个记不清楚了,大意是如此的。

    int main(int argc, char *argv[])
    {
    	char str[] = "243+*";
    	int num[4];
    	int top = 0 ;
    	int lNum,rNum,result;
    	for(int i=0;str[i]!='\0';i++)
    	{
    		int j=str[i] - '0';
    		if(str[i] >'0'&&str[i]<='9')
    		{
    			num[top]=str[i]-'0';
    			top++;
    		}
    		else
    		{
    			
    			lNum = num[top-2];
    			rNum = num[top-1] ;
    			switch(str[i])
    			{
    				case '+':
    					result = lNum + rNum;
    					break;
    				case '-':
    					result = lNum - rNum;
    					break;
    				case '*':
    					result = lNum * rNum;
    					break;
    				case '/':
    					result = lNum / rNum;
    					break;
    			}
    			top--;
    			num[top-1]=result;
    		}
    	}
    	cout<<num[top-1]<<endl;
    }
    

    3.棋牌规则如下,三个相同或者连续三个成为胡,两个相同称为门,四个相同称为坎,胡牌时只能是多个胡和一个门,问如果给定牌,计算其能胡牌的牌:如:

    给定“2 3 4 5 6 9 9” 能胡的牌是:1 4 7

    这里的胡和坎以及门是我自己根据记忆命名的,但大意是如此,个人认为这个是三个算法题目里面最难的。

    #include<iostream>
    using namespace std;
    
    bool IsCanHu(int type[],int i);
    bool IsSeries(int type[],int length);
    int * CopeArry(int source[], int length);
    
    int main(int argc, char *argv[])
    {
    	int Puk[10]={2,3,4,4,5,6,8,9,9,9};
    	int typePuk[14]={0};
    	int hu[13]={0};
    	int top=0;
    	int i=0;
    	for(i=0;i<10;i++)
    	{
    		typePuk[Puk[i]]++;
    	}
    
    	for(i=1;i<=13;i++)
    	{
    		if(typePuk[i]<4)
    		{
    			int *temp=CopeArry(typePuk,14);
    
    			if(IsCanHu(temp,i))
    			{
    				hu[top++]=i;
    			};
    		}
    	}
    	for(int j=0;hu[j];j++)
    	{
    		cout<<hu[j]<<" ";
    	}
    	cout<<endl;
    	return 0;
    }
    
    int * CopeArry(int source[], int length)
    {
    	int * dest = new int [length];
    	for(int i=0;i<length;i++)
    	{
    		dest[i]=source[i];
    	}
    	return dest;
    }
    
    bool IsCanHu(int * typePuk,int num)
    {
    	bool isCanHu=false;
    	typePuk[num]++;
    	for(int i=1;i<=13&&!isCanHu;i++)
    	{
    		if(typePuk[i]>=2)
    		{
    			typePuk[i]-=2;
    			int *temp=CopeArry(typePuk,14);
    			isCanHu = IsSeries(temp,13);
    			if(!isCanHu)
    			{
    				typePuk[i]+=2;
    			}
    		}
    	}
    	return isCanHu;
    }
    
    bool IsSeries(int * typePuk, int length)
    {
    	int i=0,k=1,j=1;
        bool isSeries=true;
    	do
    	{
    		i=0;
    		j=0;
    		while(!(typePuk[++i]>0)&&i<length);
    		
    		k=i;
    		if(k<length-2)
    		{
    			while(j<3)
    			{
    				if(typePuk[k+j]>=1)
    				{
    					typePuk[k+j]-=1;
    				}
    				else
    				{
    					isSeries=false;
    				}
    				j++;
    			}
    		}
    	}while(k<length-2);
        return isSeries;
    }
    

     上面的这些算法是我在考完之后不甘心自己的失败写的,通过编译对于{2,4,5,6,8,9,9}和{2,3,4,4,5,6,8,9,9,9}是正确的,其他的数据没有测试,另外由于很久没写C++程序了,代码的简洁度就不是很好。

  • 相关阅读:
    金蝶k3wise 核算项目、辅助资料
    金蝶——“免、抵、退”税操作说明及帐务处理
    阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试
    金蝶KIS&K3助记码SQL数据库批量刷新
    华为交换机批量加入 Vlan 方法
    华为设备默认console密码
    SQL查询数据并插入新表
    ORACLE删除当前用户下所有的表的方法
    【转】使用Navicat for Oracle新建表空间、用户及权限赋予
    [转]spring mvc注解方式实现向导式跳转页面
  • 原文地址:https://www.cnblogs.com/quandeboke/p/2984336.html
Copyright © 2011-2022 走看看