华为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); } }