华为2014校园招聘合肥机试

华为2014校园招聘合肥机试,简历投晚了,没去参加机试,题目是听参加的同学描述的,大致意思如下

第一题:整数分解,将整数n分解成不同因子的和,后一因子要比前一因子大,且最大因子要小于n,其中n<=1000

比如分解10


深搜即可,相当于在全排列里找个满足条件的

import java.util.*;
public class text
{
	public static int[] num=new int[1001];
	public static void dfs(int count,int sum,int now,int n)
	{
		if(sum>n)
		return;
		if(sum==n)
		{
			System.out.printf("%d=",n);
			for(int i=0;i<count-1;i++)
			System.out.printf("%d+",num[i]);
			System.out.printf("%d\n",num[count-1]);
			return;
		}
		if(now>=n) //要求分解的因子小于该数字
		return;
		for(int i=now;i<n;i++)
		{
			num[count]=i; 
			dfs(count+1,sum+i,i+1,n);
		}
		return;
	}
	public static void explode(int n)
	{
		dfs(0,0,1,n);
	}
	public static void main(String args[])
	{
		Scanner reader=new Scanner(System.in);
		int t=reader.nextInt();
		explode(t);
		reader.close();
	}
}

第二题:括号匹配

模拟一个栈即可

import java.util.*;
public class text
{
	public static char[] str=new char[100];
	public static char[] stack=new char[100];
	public static int judge(char str[],int len)
	{
		int n=0;//栈的深度
		for(int i=0;i<len;i++)
		{
			switch(str[i])
			{
			case '{': stack[n++]='{';break;
			case '[': stack[n++]='[';break;
			case '(': stack[n++]='(';break;
			case '}':
				if(n>=1&&stack[n-1]=='{')
				{
					n--;
					break;
				}
				else
				return 0;
			case ']':
				if(n>=1&&stack[n-1]=='[')
				{
					n--;
					break;
				}
				else
				return 0;
			case ')':
				if(n>=1&&stack[n-1]=='(')
				{
					n--;
					break;
				}
				else
				return 0;
			}
		}
		if(n==0)
		return 1;
		return 0;
	}
	public static void main(String args[])
	{
		Scanner reader=new Scanner(System.in);
		String ss=reader.nextLine();
		reader.close();
		for(int i=0;i<ss.length();i++)
		{
			str[i]=ss.charAt(i);
		}
		if(judge(str,ss.length())==1)
		System.out.println("YES");
		else
		System.out.println("NO");
	}
}

第三题计算19900101至某天的天数,然后按三天打渔两天晒网,判断这天在干嘛

判断是否是闰年即可

import java.util.*;
public class text
{
	public static int year,month,day;
	public static char[] ss=new char[8];
	public static int[] d=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
	public static void main(String args[])
	{
		Scanner reader=new Scanner(System.in);
		String str=reader.nextLine();
		reader.close();
		year=month=day=0;
		for(int i=0;i<8;i++)
		ss[i]=str.charAt(i);
		//字符串转为数字
		year=(ss[0]-'0')*1000+(ss[1]-'0')*100+(ss[2]-'0')*10+(ss[3]-'0');
		month=(ss[4]-'0')*10+(ss[5]-'0');
		day=(ss[6]-'0')*10+(ss[7]-'0');
		//System.out.println(year+" "+month+" "+day);
		int sum=0;
		for(int i=1990;i<year;i++)
		{
			if((i%4==0)&&(i%100!=0)||(i%400==0))
			sum+=366;
			else
			sum+=365;
		}
		for(int i=1;i<month;i++)
		{
			sum+=d[i];
		}
		sum+=day;
		if(month>=3&&((year%4==0)&&(year%100!=0)||(year%400==0)))
		sum++;
		if(1<=(sum%5)&&(sum%5)<=3)
		System.out.printf("期间有%d天,该天在打鱼\n",sum);
		else
		System.out.printf("期间有%d天,该天在晒网\n",sum);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值