zoukankan      html  css  js  c++  java
  • 某公司面试题的题目生成器。如果有实力大家可以进一步编程求解出答案

    package my_mian_shi;
    
    import java.util.Random;
    
    /**
     * 
     * @author 程序员与数学家
     * 面试题说明:
     * 	给予6个各个数字都不相同的4位数,每个4位数对应还有一个二位数ab,需要你猜一个四位数x(不能保证解唯一)
     *	a 表示x与ab对应的那个4位数 对应位置的数字相等的个数 。如:1234 与1432 对应位置相同的个数为2
     *	b 表示x与ab对应的那个4位数 对应位置不同数字相等的个数 。如:1234 与1432 对应位置不相同的个数为2
     */
    
    public class GameMain {
    	
    	Random r=new Random();
    	
    	int answer;
    	
    	int []question;
    	
    	int []prompt;
    	
    	public static void main(String []args) {
    		GameMain gm=new GameMain();
    		gm.run();
    	}
    	
    	/*
    	 * 展示规范格式化数
    	 * a:待规范的整数
    	 * b:规范整数的位数
    	 */
    	public void selectShow(int a,int b) {
    		
    		if(a==0) {
    			for(int i=0;i<=b;i++)
    			System.out.print("0");
    		}else if(a<Math.pow(10, b) && a>=Math.pow(10, b-1))
    			System.out.print("0"+a);
    		else
    			System.out.print(a);
    	}
    	
    	/*
    	 * 启动函数
    	 */
    	public void run() {
    		init();
    		System.out.print("答案:");
    		this.selectShow(answer,3);
    		System.out.println();
    		System.out.println("问题:");
    		for(int i=0;i<6;i++) {
    			this.selectShow(question[i],3);
    			System.out.print("    ");
    			this.selectShow(this.prompt[i], 1);
    			System.out.println();
    		}
    	}
    	
    	/*
    	 * 初始化
    	 */
    	public void init() {
    		answer=getFourFigures();
    		question=new int[6];
    		prompt=new int[6];
    		int b;
    		
    		for(int i=0;i<question.length;i++) {
    			b=getFourFigures();
    			if(intIsExist(question, b,0,i)<0)
    				question[i]=b;
    		}
    		
    		//构造第一个提示
    		for(int i=0;i<prompt.length;i++) {
    			if(this.answer<1000) {
    				if(question[i]<1000)
    					prompt[i]=getEqualPositionAndValueCount(answer, question[i])+1;
    				else
    					prompt[i]=getEqualPositionAndValueCount(answer, question[i]);
    			}else {
    				prompt[i]=getEqualPositionAndValueCount(answer, question[i]);
    			}	
    		}
    		//构造第二个提示
    		for(int i=0;i<prompt.length;i++) {
    			if((this.answer<1000 && this.intExist0(question[i]))
    				|| (question[i]<1000 && this.intExist0(this.answer)))
    				this.prompt[i]=this.prompt[i]*10+this.getNotEqualPositionAndEqualValueCount(answer, question[i])+1;
    			else
    				this.prompt[i]=this.prompt[i]*10+this.getNotEqualPositionAndEqualValueCount(answer, question[i]);
    
    		}
    		
    	}
    
    	/*
    	 * 获取一个数是否含有0这个数字
    	 */
    	public boolean intExist0(int a) {
    		while(a!=0) {
    			if(a%10==0)
    				return true;
    			a=a/10;
    		}
    		return false;
    	}
    	
    	/*
    	 * 获取两整数不同位置相同值的个数(不够位前面会补0)
    	 */
    	public int getNotEqualPositionAndEqualValueCount(int a,int b) {
    		int count=0;
    		int temp,ba=0,bb=0;
    		while(a!=0) {
    			temp=b;
    			while(temp!=0) {
    				if((a%10==temp%10) && (ba!=bb))
    					count++;
    				temp=temp/10;	
    				bb++;
    			}
    			bb=0;
    			a=a/10;
    			ba++;
    		}
    		return count;
    	}
    	
    	
    	/*
    	 * 判断两个整数对应的位置相同且值相同的数字的个数
    	 */
    	public int getEqualPositionAndValueCount(int a,int b) {
    		int count=0;
    		int max = a>b?a:b;
    		while(max!=0) {
    			if(a%10==b%10)
    				count++;
    			max=max/10;
    			a=a/10;
    			b=b/10;
    		}
    		return count;
    	}
    	
    	
    	/*
    	 * 判断一个整型数组是否存在另外一个整数
    	 * a:整型数组
    	 * b:待比较的整数
    	 * start:开下标
    	 * end:结束下标
    	 */
    	public int intIsExist(int []a,int b,int start,int end) {
    		for(int i=start;i<end;i++) {
    			if(a[i]==b)
    				return i;
    		}
    		return -1;
    	}
    	
    	/*
    	 * 生成1个各位互不相同的4位数 (返回的是三位数代表第一位是0)
    	 */
    	public int getFourFigures () {
    		int a,b;
    		int []temp=new int[3];
    		a=r.nextInt(10);
    		int i;
    		for (i=0;i<3;i++) {
    			temp[i]=r.nextInt(9);
    			b=decideIsExist(a, temp[i]);
    			if(b<0 || (temp[i]==0 && b==i+1)) {
    				a=a*10+temp[i];
    			}else{
    				i--;
    			}
    		}
    		
    		return a;
    	}
    	
    	/*
    	 * 判断一个n位数是否存在某个0到9的数
    	 * 返回值:对应的位置数  
    	 * a:n位数(认为第n+1位是0)
    	 * b:某个0到9的数
    	 */	
    	public int decideIsExist(int a,int b) {
    		if(b<0 || b>9) { throw new RuntimeException("不是用0到9的数进行比较"); }
    		int i=0;
    		while(a!=0) {
    			if((a%10)==b)
    				return i;
    			a=a/10;
    			i++;
    		}
    		if(a==b) return i;
    		return -1;
    	}
    }
    

     

    如图:

    01 表示 答案和6120  有一个数字值相同 位置不同

    30 表示 答案和0513 有三个数字值相同 位置不同

  • 相关阅读:
    内存优化
    OpenThreads库学习
    WPS/office使用技巧系列
    NB-IOT学习
    JSON和XML
    物联网平台学习
    .net提供的5种request-response方法一
    HTML5之IndexedDB使用详解
    jQuery圆形统计图实战开发
    用javascript将数据导入Excel
  • 原文地址:https://www.cnblogs.com/math-and-it/p/9879154.html
Copyright © 2011-2022 走看看