`
随便小屋
  • 浏览: 106509 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

2015年9月15号360笔试算法2

 
阅读更多

Problem Description 

 

当你学一些可视化程序设计语言时,老师经常让你设计并编程做出一个计算机,这时也许你会仿照windows系统自带的计算器外观和功能区设计,但是现在考试要你多做出一个有新功能的计算器,实现当输入一个数是,能够将这个数分解成一个或多个素因子乘积的形式,并按素因子的大小排列显示出来。大家对计算器中数的表示应该是很清楚的,下面显示出了0-9这是个数组的表示形式,每个数字占据5*3大小的字符区域。



 你能实现这个心能能吗?试试看吧!

 

输入

能输入多组测试数据,每组包括一个正整数n(n<=1000000)

 

 

输出

 

对于每个数,将它分解成若干个素数乘积的形式,应按从小到大的顺序输出,素因子之间用“*”的形式链接

 

 

样例输入

10
2

 

 

样例输出

 -     -   
  |   |    
 -  *  -   
|       |  
 -     -   
 
 -   
  |  
 -   
|    
 -   

 

 

解析:

此题主要有两个难点,第一是将一个整数分解为素数的乘积,第二是将各个数显示出来,

 

代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class WindowsNumber {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNextInt()) {
			compute(scanner.nextInt());
		}
		scanner.close();
	}
	
	public static void compute(int number) {
		String[] number0 = new String[]{" - ", "| |", "   ", "| |", " - "};
		String[] number1 = new String[]{"   ", "  |", "   ", "  |", "   "};
		String[] number2 = new String[]{" - ", "  |", " - ", "|  ", " - "};
		String[] number3 = new String[]{" - ", "  |", " - ", "  |", " - "};
		String[] number4 = new String[]{"   ", "| |", " - ", "  |", "   "};
		String[] number5 = new String[]{" - ", "|  ", " - ", "  |", " - "};
		String[] number6 = new String[]{" - ", "|  ", " - ", "| |", " - "};
		String[] number7 = new String[]{" - ", "  |", "   ", "  |", "   "};
		String[] number8 = new String[]{" - ", "| |", " - ", "| |", " - "};
		String[] number9 = new String[]{" - ", "| |", " - ", "  |", " - "};
		
		List<List<String[]>> resultNumbers = new ArrayList<List<String[]>>();
		//保存被分解的数
		int[] result = new int[10000];
		int resultLength = 0;
		resultLength = decodeInt(number, result);
		for(int i=0; i<resultLength; i++) {
			List<String[]> resultNumber = new ArrayList<String[]>();
			int temp = result[i];
			while((temp%10 != 0) || (temp/10>0)) {
				int mod = temp % 10;
				temp = temp / 10;
				switch (mod) {
				case 0:
					resultNumber.add(0, number0);
					break;
				case 1:
					resultNumber.add(0, number1);
					break;
				case 2:
					resultNumber.add(0, number2);
					break;
				case 3:
					resultNumber.add(0, number3);
					break;
				case 4:
					resultNumber.add(0, number4);
					break;
				case 5:
					resultNumber.add(0, number5);
					break;
				case 6:
					resultNumber.add(0, number6);
					break;
				case 7:
					resultNumber.add(0, number7);
					break;
				case 8:
					resultNumber.add(0, number8);
					break;
				case 9:
					resultNumber.add(0, number9);
					break;
				}
			}
			resultNumbers.add(resultNumber);
			
		}
		
		//将最终结果输出
		for(int i=0; i<5; i++) {
			for(int j=0; j<resultLength; j++) {
				List<String[]> resultNumber = resultNumbers.get(j);
				for(int k=0; k<resultNumber.size(); k++) {
					System.out.print(resultNumber.get(k)[i]);
				}
				if((i==2) && (j!=resultLength-1))
					System.out.print(" * ");
				else
					System.out.print("   ");
			}
			System.out.println();
		}
	}
	
        //此处代码借用别人的
	public static int decodeInt(int n, int[] facArr) {
		int fac;
		int count;
		if (n < 4) {
			facArr[0] = n;
			return 1;
		}
		count = 0;
		// 下面的while循环为2试出n,直到2不是n的因子为止
		while ((n & 1) == 0) // 这里判断偶数用 (n &1)==0,这比(n % 2)==0更快
		{
			facArr[count++] = 2;
			n /= 2;
		}

		fac = 3; // 用3到sqrt(n)之间的奇数试除
		while (fac * fac <= n) // fac*fac <= n
		{
			while (n % fac == 0) {
				facArr[count++] = fac;
				n /= fac;
			}
			fac += 2;
		}
		if (n == 1)
			return count;

		facArr[count++] = n;
		return count;
	}

}

 

分享到:
评论

相关推荐

    2015-9-虹软校招内推笔试题-算法岗

    2015年9月,该公司针对应届毕业生进行了一次内推笔试,旨在选拔优秀的算法工程师加入团队。作为一家具有前瞻性和潜力的公司,虹软对算法工程师的要求不仅限于扎实的理论基础,还包括创新思维和实际应用能力。 ...

    360校招笔试真题(2015)

    2015年的360校招技术类笔试题,不仅涵盖了广泛的IT知识领域,还体现了公司对于求职者技术基础、逻辑思维以及问题解决能力的高要求。下面,我们将对这份真题进行深入解读,探讨其中涉及的关键知识点。 首先,基础...

    java笔试常见的算法题

    全排序、二分查找、冒泡排序、阶乘、最大公约数、最小公倍数、...这是里面包含的算法,本人在准备笔试的时候找的,算法尽量采用最优的。 所有的代码均经过测试,个人觉得没有问题,如果哪位大牛找到错误,欢迎批评指正

    2015年360笔试题

    资源是2015年360校园招聘笔试题,同学带回来拍成了照片,供大家下载,参考学习

    2015阿里巴巴实习生招聘2015年4月2日在线笔试题

    2015阿里巴巴实习生招聘2015年4月2日在线笔试题,我投的研发Java岗,不过选择题没有单独考察Java的知识点,倒是有几题C++题目,看来选择题只是随机从题库生成,而且阿里的题库并没有多少考JAVA的选择题

    2015虹软校招笔试题-算法岗

    2015年9月虹软校招内推笔试题-算法工程师岗位

    DJI大疆2019年8月雷达算法工程师笔试题B卷

    以下是大疆2019年8月雷达算法工程师笔试题的知识点详细解读。 首先,“DJI大疆2019年8月雷达算法工程师笔试题B卷”这一标题说明这是一次面向特定职位(雷达算法工程师)的招聘考试。大疆(DJI)是一家专门从事民用...

    华为OD、大厂笔试算法题

    华为OD、大厂笔试算法题; 一共87题,每一题附答案(java语言),笔试时频繁出现的原题,想进大厂的小伙伴,欢迎下载; eg: 1、5键键盘的输出 有一个特殊的5键键盘,上面有a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键...

    笔试面试算法题文档.zip

    笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题文档.zip 笔试面试算法题...

    大疆算法工程师笔试.pdf )

    大疆公司是一家以生产民用和商用无人飞行器知名的高科技企业,对算法工程师的笔试通常会包含但不限于计算机视觉、机器学习、数据结构、算法设计和分析等领域的知识点。 以下是根据大疆公司背景及算法工程师职位需求...

    2015年最新的Java工程师笔试题

    2015年最新的Java工程师笔试题 本资料共包含以下附件: 2015年最新的Java工程师笔试题.doc

    java笔试算法题40道

    - **问题描述**:一对兔子从第三个月开始每个月都会产下一对新兔子,而新生的兔子会在第四个月开始也每个月产下一对兔子。假设所有兔子都不会死亡,求每个月的兔子总数。 - **解决方法**:此问题可以用递归或迭代的...

    C++面试题笔试题C++ 数据结构算法笔试题资料合集.zip

    C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....

    大华股份2014年嵌入式软件、算法类笔试题

    【大华股份2014年嵌入式软件、算法类笔试题】是针对该公司当年招聘过程中的一个重要环节,这是一场集技术性与专业性于一体的考试,旨在考察应聘者在嵌入式系统开发和算法设计方面的综合能力。2014年的笔试题目相比...

    奇虎360 2015年校园招聘笔试题

    第一部分 奇虎360 2015年校园招聘笔试题

    2019雷达算法工程师笔试题

    2019年的这份笔试题涵盖了多个相关的知识点,下面我会详细解释。 首先,电磁场与电磁波的知识在这个笔试题中占比不多,但这是雷达技术的基础。电磁波的传播特性、极化效应以及电磁波与物体的相互作用等基础概念,对...

    java笔试面试算法题

    在Java笔试面试中,算法题是考察候选者编程能力、逻辑思维和问题解决能力的关键环节。这些题目通常涵盖数据结构、排序、搜索、图论等多个领域,涉及到的基础知识包括但不限于以下内容: 1. **基础算法**:如冒泡...

    经典Java笔试算法解析和代码:二分查找.zip

    经典Java笔试算法解析和代码:二分查找.zip 经典Java笔试算法解析和代码:二分查找.zip 经典Java笔试算法解析和代码:二分查找.zip 经典Java笔试算法解析和代码:二分查找.zip 经典Java笔试算法解析和代码:二分查找...

Global site tag (gtag.js) - Google Analytics