招行信用卡中心笔试
遇到过最友好的笔试了,分享代码攒人品。
第一题:输入一组边长,在优先组成正方形的前提下,求问可以组成正方形和长方形个数各为多少。比如[1,1,1,1,2,2,4,4]可以组成一个正方形和一个长方形
笔试的时候想不起来矩形英语了。。
package xinyongka; import java.util.*; public class First { public static void main(String[] args) { Scanner in=new Scanner(System.in); int times=in.nextInt(); for(int i=0;i<times;i++) { int n=in.nextInt(); Map<Integer, Integer> map=new HashMap<Integer, Integer>(); List<Integer> list=new ArrayList<Integer>(); for(int k=0;k<n;k++) { int temp=in.nextInt(); //map统计边出现次数,list存放边种类 if(map.containsKey(temp)) { int count=map.get(temp); count++; map.put(temp, count); }else { map.put(temp, 1); list.add(temp); } } //以上都是输入统计 int square=0;//正方形 int ju=0;//矩形 for(int j=0;j<list.size();j++) { int k=list.get(i); if(map.get(k)>4) { int num=map.get(k); square=square+num/4; map.put(k, num%4); } if(map.get(k)>2) { int num=map.get(k); ju=ju+num/2; //map.put(k, num%2); } } System.out.println(square +" "+ju/2); } } }第二题核心代码:输入一个数组,是否可以通过数组内数据交换位置使其符合a[i]%2==i%2,i从1开始。如果可以输出交换次数,不可以则输出-1。
public static int countExchTimes(int[] input) { int n=input.length; if(n==0) return -1; if(n==1) { if(input[0]%2==1) return 0; else return -1; } int count1=0,count2=0;//统计奇数位和偶数位不符合要求的数字个数 for(int i=0;i<n;i++) { if(i%2==1 && input[i]%2==0) count1++; if(i%2==0 && input[i]%2==1) count2++; } if(count1!=count2) return -1; else return count1; }