Java程序设计编程题40题(一)

        听一些人说平时自己多敲一敲网上的什么类似经典算法多少题多少题啊,对一些公司的笔试面试会经常碰到,我想强调一下这个所谓的碰到并不是指会碰到原题,也不一定就只是单纯的换个问法而已,而是当你做过这些练习后,并且是理解了的,在对一些笔试面试的算法题上很多都能给自己带来一个思路或者方法。如碰到某道算法题恰好可以利用之前某个算法题里解决部分问题的做法,又可以利用另外一道算法题里解决某部分问题的做法,这个是我自己有过亲身经历的。发现了这个好处之后,才有了更大的动力推动我继续去敲剩下的部分,并把敲过的拿出来分享,有些是自己写的(也就简单点的自己能单靠自己敲吧-_-!)有些是借鉴别人后修改成自己的版本(代码已经跑过的)。

       在上个暑假我花时间去敲了一部分,我敲的很慢,因为我不只是单纯的在跟着网上的答案敲,而是先自己稍微能理解之后,自己试着敲出来,即使大多时候最后要借鉴别人的答案才知道具体怎么做,但至少我有去思考、去理解并自己去写一遍。即使不是自己设计出来的,但也能学到别人的设计思路吧,废话不多说了,看题.....

 

 1、 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

 

  自己理解的思路:从2开始往后判断整数是否能够被整除,能则输出这个因数,并且整

                   除后的整数是否能继续被整除,能则再输出。

                   这里就是单纯的循环啦,但循环的时候顺便考虑下是否能尽量减少循

                   环次数,这里任何一个整数除了被自己整除,最大能整除的就是自己

                   的1/2,所以我们的循环只需要迭代到整数的1/2就行了。

 

    

import java.util.*;
public class Pro1{
 
   public static void main(String[] args){
          System.out.print("请输入一个整数:");//输入要分解的整数
	  int n = new Scanner(System.in).nextInt();
	  fenJie(n);
   }
   //分解因数
   public static void fenJie(int n){
          System.out.print(n+"=");
	  for(int i=2;i<=n/2;i++){
	      while((i!=n) && (n%i==0)){
		      System.out.print(i+"*");
			  n=n/i;
		  }
	  }
	  System.out.print(n);
   }
}

 

 2、题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 

    

     思路:对于这种判断的题,像if...else这样的虽然简单,但最好使用我们平时很少用的三元运算符,听说这

                 种写法会比较受一些面试官喜欢。

 

 

import java.util.*;
public class Pro2{
 
   public static void main(String[] args){
          System.out.print("请输入一个整数:");
	  int n = new Scanner(System.in).nextInt();
	  change(n);
   }
   public static void change(int n){
          String str=(n>=90?"A":(n>=60?"B":"C"));
	  System.out.print(str);
   }
}

 

   3、题目:输入两个正整数m和n,求其最大公约数和最小公倍数

   

  思路:1)首先我们先从最大公约数入手,因为最小公倍数可以利用最大公约数来计算。

               2) 最大公约数下面用的是辗转相除法:首先用较大的数除以较小的数,接着将除数

                     当做被除数,上一次的余数作为除数,继续上一步操作,直到除数的值为0,此时

                     被除数就是要求的最大公约数。

               3)最小公倍数等于俩整数乘积除以最大公约数。

 

   

import java.util.*;
public class Pro3{
 
   public static void main(String[] args){
          Scanner scan = new Scanner(System.in);
          System.out.print("请输入第一个整数:");
	  int m = scan.nextInt();
	  System.out.print("请输入第二个整数:");
	  int n = scan.nextInt();
	  maxGongyue(m,n);
          minGongbei(m,n);
   }
   //求最大公约数
   public static void maxGongyue(int m,int n){
       
           int max = m>n?m:n;
	   int min = m<n?m:n;
	   while(min != 0){
	         int tmp = max % min;
		 max = min;
		 min = tmp;
	   }
		 System.out.println("最大公约数是:"+max);
   }
   //求最小公倍数
   public static void minGongbei(int m,int n){
      
          System.out.println("最小公倍数是:"+(m*n /maxGongyue(m,n)));

   }
}
 

 

   4、 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。   

 

   思路:1)一行字符,也就是一个字符串,要判断里面的每个字符自然是要先将字符串转换成一个一个的

                    字符,这里采用将字符串转换成字符数组。

               2)对数组遍历,字符A - Z对应十进制65—90,a—z对应97—122,空格对应十进制32, 字符0—9对应十

                    进制48—57。

 

    

import java.util.*;
public class Pro4{
 
   public static void main(String[] args){
          int zimu = 0,kongge = 0, shuzi = 0, other = 0;
          System.out.println("请输入一行字符");
	  String strline = new Scanner(System.in).nextLine();
	  char[] strChar = strline.toCharArray();
	  for(char c : strChar){
	     if((c>=65 && c<=90) || (c>=97 && c<=122)){
		    zimu ++;
	     }
	     else if(c==32){
		    kongge ++;
	     }
	     else if(c>=48 && c<=57){
		    shuzi ++;
	     }
	     else{
		    other ++;
	     }
	  }
	 System.out.println("英文字母个数:"+zimu+",空格个数:
       "+kongge+",数字个数:"+shuzi+",其他字符个数:"+other);
   }
   
}
 

 

   5、题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共

       有5个数相加),几个数相加由键盘输入。

 

   

import java.util.*;
public class Pro5{
 
   public static void main(String[] args){
          Scanner scan = new Scanner(System.in);
          System.out.print("输入一个整数作为基数:");	
	   int a = scan.nextInt();
	   System.out.print("输入相加个数:");
	   int n = scan.nextInt();
	   int tmp = 0;
	   long sum = 0;
	   for(int i = 0; i<n;i++){
	     tmp = tmp * 10 +a;
		 sum +=tmp;
	   }
	   System.out.println("最后结果是:"+sum);
	   
   }
   
}

 

内容简介 《Java程序设计集》是同作者所编写的清华大学教材《Java程序设计》相配套的习集。习集内容覆盖面广,包括:Java言的基本常识、基本语法、面向对象的基本概念、数组、字符串、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程规范、网络程序设计、多媒体民图形学程序设计以及数据库程序设计等。全书共分为习、参考答案和测试要点与解说明3个部分。习包括判断正误、填空、选择、简答编程题和趣味等6种型,并按难易程序分为3 个等级,采用星号注明。本习集收集了Java程序编写常见问,并以习形式总结和归纳Java程序设计知识要点,同时兼顾了SCJP(Sun公司 Java程序员认证考试),从而降低学习难度,减少编写程序出现错误的枘地,也便于掌握各个知识要点或测试对Java程序设计的掌握熟练程度。这些特点有利于初学者在学习过程中少走弯路。对知识点的总结以及内容的全面性也使得《Java程序设计集》具有一定的手册特性,非常适合复习,同时也方便教师出,使得各章节的试容易在试卷中分布均匀合理。在本习集中的编程题和趣味还有可能采用其他计算机语言实现,从而本习集也有可能成为学习其他计算机语言的实践素材。 编辑推荐 内容全面:习全面覆盖了Java程序设计(J2SE)的基本知识要点和重要知识要点。以习的形式对JaVa程序设计方法和常见问进行了总结与归纳,从而方便复习。   实用性:《Java程序设计集》每章都含有一些趣味,营造了一种轻松而快乐的学习氛围,努力培养和提高学生的学习乐趣,同时也使学生容易产生学习成就感。   趣味性:习基本上覆盖了程序员在编写Java程序时经常出现的问Java程序设计知识要点,各习也列出其测试要点,从而方便教师从中挑选或改编考以及方便学生进行实战模拟练习或测试,同时也可以为SCJP考试作准备。   简洁性:每道习者晖力求典型而简洁,这样既方便初学者,也有利于提高学习效率,在较短的时间内测试并领会较多的知识要点。 作者简介 雍俊海1991年到2000年就读于清华大学计算机科学与技术系,获学士。硕士和博士学位,被评为清华大学优秀博士毕业生,博士论文被评为全国优秀博士论文。从2000年3月到2000年6月在香港科技大学计算机系担任访问研究员,从2000年11月到2002年9月在美国肯塔基大学计算机系做博士后,现为清华大学软件学院教师。参与或负责多个国家自然科学基金项目。国家863项目。973项目和美国自然科学基金项目。在2003-2004学年度在清华大学开设了"Java程序设计"课程,获得学生一致好评。根据清华大学2003-2004学年秋季学期教学评估结果,教学成绩在全校名列前茅,在清华大学软件学院所有参评教师中取得教学成绩第一名,在所有讲授Jaya课程的清华大学参评教师中获得教学成绩第一名。因此还获得了清华大学软件学院教学工作优秀奖、大学生研究训练计划(SRT)优秀指导教师一等奖。 目录 第一部分习 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第二部分 参考答案 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 第三部分 测试要点与解说明 第1章 绪论 第2章 结构化程序设计 第3章 面向对象程序设计 第4章 数组、字符串与异常处理 第5章 文件与数据流 第6章 图形用户界面设计 第7章 小应用程序 第8章 多线程程序设计 第9章 编程规范 第10章 网络程序设计 第11章 多媒体与图形学程序设计 第12章 数据库程序设计 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值