跌倒了,一定要爬起来。不爬起来,别人会看不起你,你也会失去机会。

1.题目:打印出杨辉三角形(要求打印出10行)

什么是杨辉三角呢?下面这个就是

杨辉三角最大的特性就是每个数字都是该数字肩上的两个数字之和,这道题经常在学习二维数组和循环控制中出现

我们可以假设吧这些数存在一个二维数组中,那么ints[i][j]=ints[i-1][j-1]+ints[i-1][j];我们可以很容易使用for循环加二维数组实现它

int[][] ints=new int[10][10];for (int i=0;i<10;i++){for (int j=0;j<=i;j++){if (i-1<0||j-1<0){ints[i][j]=1;}else {ints[i][j]=ints[i-1][j-1]+ints[i-1][j];}System.out.print(ints[i][j]+" ");}System.out.println();}

2.题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

对于这种一开始看可能没思路的题你可以采取先把前几个数字写出来,然后研究其规律,最后编程实现

那么我们把前10个月的数字写出来:1 1 2 3 5 8  13 21 34 55

通过观察发现这个数列的规律为每个数字为前两位数字之和,这不就是斐波那契数列吗?(高中讲的)

那我们便可以定义三个变量分别表示一月份的兔子、二月份的兔子、三月份的兔子,使用for循环不断输出每个月的兔子数量

另外我们还要定义一个变量用于交换值

每次循环时,先使用额外变量保存一月份的兔子数,该月的一月兔子数等于二月份兔子长到三月份生的一窝加上原来已经就是三月份的兔子生的一窝

三月份的兔子数等于二月份的兔子长到三月份了加上原来就是三月份的兔子

二月份的兔子等于上个月一月份的兔子

总数就是三个变量之和

int count=1;int oneMonth=1;int twoMonth=0;int threeMonth=0;int cache=0;for (int i=0;i<30;i++){System.out.println("月份:"+(i+1)+" 总数:"+count+" 一月:"+oneMonth+" 二月:"+twoMonth+" 三月:"+threeMonth);cache=oneMonth;oneMonth=twoMonth+threeMonth;threeMonth=twoMonth+threeMonth;twoMonth=cache;count=oneMonth+twoMonth+threeMonth;}

那还有一种思路就是把两个月的兔子看成一轮,每个月的数量等于前两个月份之和,一次算出来两个月分别的兔子数量

long s1,s2;// 定义这个月和下个月兔子的数量s1 = 1;  //第一个月为1对s2 = 1;  //第二个月为1对int i=1;  //定义一个控制变量int m=30;  // 月份数//while循环while(true){//第一个月和第二个月兔子的数量都为1对if(i==1||i==2){System.out.println(i+" month: "+s1);i++; // 控制变量 i 加1}// i 大于3并且小于我们需要查看的月份else if(i<m){s1 = s1+s2;s2 = s1+s2;System.out.println(i+" month: "+s1);i++;//月份加1System.out.println(i+ " month: "+s2);i++; //月份加1}else{break;//不符合条件就退出}}

我们还可以利用java自带的数据结构来完成这件事

LinkedList<Integer> integerList=new LinkedList<>();for (int i=0;i<30;i++){if (i<2){integerList.add(1);System.out.println("月份:"+(i+1)+" 兔子总数:"+integerList.getLast());}else {integerList.add(integerList.getLast()+integerList.get(integerList.size()-2));System.out.println("月份:"+(i+1)+" 兔子总数:"+integerList.getLast());}}

3.题目:判断101-200之间有多少个素数,并输出所有素数。

判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

遇到这种题就直接暴力for循环,定义个boolen判断是不是素数

for (int i=101;i<=200;i++){boolean isPrimeNumber=true;for (int j=2;j<i;j++){if (i%j==0){isPrimeNumber=false;break;}}if (isPrimeNumber){System.out.println(i);}}

有一种巧妙的办法可以不用定义boolen变量作为标志,我们只需要把内层玄幻的j定义在外层,这样如果i等于j说明循环走完了,就可以判断它是一个素数

 int j=0;for (int i=101;i<=200;i++){for (j=2;j<i;j++){if (i%j==0){break;}}if (j==i){System.out.println(j);}}

在这些优化之后我们还可以借用数学的帮助,凡是一个数开方后的数的素数都是原来那个数的素数,至于最后的加一是因为循环是从2开始的,1是任何数的因数

 int j=0;int k=0;for (int i=101;i<=200;i++){k=(int)sqrt(i+1);for (j=2;j<=k;j++){if (i%j==0){break;}}if (j==k+1){System.out.println(i);}}

4.题目:将一个正整数分解质因数。

例如:输入90,打印出90=2*3*3*5。

其实这道题就相当于找素数的升级版,找到给定范围内几个素数的想乘结果等于它本身

做这种题我们很容易想到递归,不断找素数,不断缩小范围

static List<Integer> integerList=new ArrayList<>();
private static void Method1() {Scanner scanner=new Scanner(System.in);int number=scanner.nextInt();getPrimeFactor(number);System.out.println(integerList);}private static void getPrimeFactor(int number) {for (int i=2;i<=number;i++){if (number%i==0){integerList.add(i);getPrimeFactor(number/i);break;}}}

我们可以将其转换成while循环

 Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k=2;System.out.print(n+"=");//输出第一步格式while(k<=n){//初值k为2,n为输入的数字,在程序执行的过程中k渐渐变大(k++),n渐渐变小(n/k)if(k==n){//当n和k相等的时候,就直接输出n的值(此时输出k也行,因为n==k)System.out.println(n);break;} else if(n%k==0){System.out.print(k+"*");//如果n <> k,但n能被k整除,则应打印出k的值n = n/k;//n除以k的商,作为新的正整数你n}else{k++;//如果n不能被k整除,则用k+1作为k的值}}

【精选】JAVA入门算法题(一)相关推荐

  1. JAVA入门算法题(三)

    把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 估计统计字符是所有人都做过的题 这里给出两种思路,第一种思路是比 ...

  2. 【精选】JAVA入门算法题(五)

    把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:重复的字符串 /*** 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超 ...

  3. 【精选】JAVA入门算法题(四)

    把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:全排列问题 这种问题在算法题中应用很多,主要思路是使用递归来求,求n个数的全排列就是把第一个数固定后求n-1个数的全排列,不断递归到 ...

  4. 【精选】JAVA入门算法题(二)

    时时要有危机意识.别以为你命好运也好. 1.题目:打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个 水仙花数 ,因为153=1的三次方+5的 ...

  5. JAVA入门算法题(十四)

    一.最小的淘气值 题目: /*** 老师要给学生安排座位,经统计教室有N个双人桌,M名学生,每个学生有一个淘气值,* 要合理安排座位,使得班内同桌之和的淘气值最大值尽可能的小,输出最小值.*/ 这是一 ...

  6. JAVA入门算法题(十三)

    一.出现一次的数 题目: /*** 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素.* 说明:* 你的算法应该具有线性时间复杂度. 你可以不使用额 ...

  7. JAVA入门算法题(十)

    稳扎稳打,可攻可守.没抓在手里的成功都是不算的. 1.删除重复的数字 /*** 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次.* <p>* 示例 1:* 输入: 1-> ...

  8. JAVA入门算法题(九)

    交会修理你的朋友.这种朋友正是你人生的导师. 1.加一 /***给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一.* 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字.* 你 ...

  9. JAVA入门算法题(八)

    有志者自有千计万计,无志者只感千难万难. 1.报数序列 /*** 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下:* 1. 1* 2. 11* 3. 21* 4. 1 ...

最新文章

  1. pandas高级处理-交叉表与透视表
  2. 第二阶段冲刺——第三天
  3. vs2017报错 popen pclose
  4. what to do preparing for phd
  5. java + httpclient +post请求(记录下)
  6. mysql语法与decode语法的不同
  7. linux与windows间共享文件夹 FileZilla树莓派文件传输
  8. 前端学习(2122):项目演示
  9. GridView强制不换行
  10. Python协程--实现斐波那契数列(Fibonacci)的几种方式
  11. 【Oracle】非RMAN恢复数据文件、控制文件
  12. php fmod小数位数_PHP取余函数介绍MOD(x,y)与x%y
  13. 创建页面html,DW软件新建一个html网页
  14. Lena,Pepper等图像,图像处理必备资料。
  15. 微信开发者工具之页面跳转
  16. 鸿蒙应用开发教程第12期:被央视点名!打破垄断志在必得?
  17. 刚写完的 基于微信的房产中介预约看房小程序 毕业设计毕设源码
  18. Win10系统自带功能,提高办公效率
  19. 前端项目运行错误提示及解决proble (1 error, 0 warnings) m1 error and 0 warnings potentially fixable with the `--fi
  20. Boost串口通信 boost::asio::serial_port基本使用

热门文章

  1. 瑞萨e2studio(20)----更新FSP版本
  2. WebGL编程指南03-在javaScript程序通过uniform变量向片元着色器传值
  3. java点名代码滚动_随机点名的java实现(版本一)
  4. MySQL:几个奇怪state和主从延迟问题(特例)
  5. mysql外卖怎么写_MySQL曹操外卖二
  6. MYO:体感新玩法,生物电感应
  7. 20170412----面试总结---一直更新
  8. Android 官方现代 App 架构解读 - 启程
  9. lenovo 部分打印机 PPD 文件
  10. 计算机视觉小白的心声