猿圈网的几个 Java 挑战题评测题分享

本贴最后更新于 2706 天前,其中的信息可能已经时移世异

先不管猿圈网是干什么的,反正我觉得那是一个可以做题,可以敲代码的网站 😆 ,昨天意外发现了这个网站,在上面做了几道 Java 的题,总感觉哪里做的不太对劲,分享出来相互交流一下,帮忙看看我做的到底哪块是不对的。

相关说明:

代码中从注释 //No.1 开始到注释 //end_code 结束是需要自己写代码实现功能的地方,除此部分之外的代码基本都是试题给定的代码。

1. 插入排序

用 java 代码实现插入排序

import java.util.Arrays; // 自己导入 public class InsertSortTest { public static void main(String[] args) { int[] array = { 49, 38, 65, 97, 76, 13, 27, 14, 10 }; //No.1 //开始写代码,用java实现插入排序 if (array == null || array.length == 0) { //判断数组不存在或为空 return; } int i, j, tmp; int len = array.length; for (i = 1; i < len; i++) { // 从 1 开始遍历 array j = i; tmp = array[i]; while (j > 0 && tmp < array[j - 1]) { // 如果 array[i] < array[i - 1] array[j] = array[j - 1]; // array[i] = array[i - 1] j--; } array[j] = tmp; // array[i - 1] = array[i] } System.out.println(Arrays.toString(array)); //end_code } }
### 2. ip 转化为整数 > #### `使用 java 代码实现将 IPV4 的 IP 地址转化为对应整数并输出,比如 192.168.199.1 对应整数为 3232286465` > > ``` java > public class IpToNumber { > public static void main(String[] args) { > IpToNumber ipToNumber = new IpToNumber(); > System.out.println("IPV4的IP地址对应的整数为 : " + ipToNumber.ipToLong("192.168.199.1")); > } > > public long ipToLong(String ipAddress) { > long result = 0; > String[] ipAddressInArray; > > //No.1 > //开始写代码,将IPV4的IP地址转化为相对应的整数 > ipAddressInArray = ipAddress.split("\\."); // 将 ip 截为 4 个部分字符串 > long[] ipLong = new long[4]; > for (int i = 0; i < ipAddressInArray.length; i++) { > ipLong[i] = Long.parseLong(ipAddressInArray[i]); // 分别转为 long 型后存入 ipLong 中 > } > result = (ipLong[0] << 24) + (ipLong[1] << 16) + (ipLong[2] << 8) + ipLong[3]; // 进行位移操作 > //end_code > return result; > } > } > ``` ### 3. 找重复数字和未出现数字 > #### `假设 0-10000 数字中有 2 个数字相同,还有 1 个数字没有出现,仅遍历一次数组找出重复数和未出现的数字。` > > ``` java > public class FindNumberTest { > public static void main(String[] args) { > int number[] = new int[10001]; > int numCopy[] = new int[10001]; // 这个变量我没有用到...不知道是用来干嘛的 > int repeat = 0, notAppear = 0; > int sumNumber = 0; > int i; > > for (i = 0; i < 10001; i++) {//数组初始化 > number[i] = i; > } > number[573] = 5236;//设定重复数字5236出现两次,573不出现 > > //No.1 > //开始写代码,仅遍历一次数组找出重复数和未出现的数字。 > for (int j = 0; j < number.length; j++) { > if(j != number[j] && number[j] == number[sumNumber]) { // 因为数组 number[0] = 0, number[1] = 1... 所以这算不算是投机取巧 :joy: > repeat = number[j]; > notAppear = j; > } > sumNumber++; > } > //end_code > System.out.println("重复数字:"+repeat + " 未出现数字:" + notAppear); > } > } > ``` ### 4. 约瑟夫环问题 > #### `用 java 代码实现约瑟夫环问题,50 个人围成一圈报数,报到 3 的倍数的离开,求最后剩下的那个人原来站的位置` > ``` java > // 在主方法中调用 > public static void YueSeFuLoop() { > LinkedList linkedlist = new LinkedList(); > //No.1 > //开始写代码,有50人围成一圈报数,报到3的倍数的人离开,求最后剩下的人原来站在第几位,实现removeFromList方法 > for (int i = 1; i <= 50; i++) { > linkedlist.add(i); > } > int index = 0; > while(linkedlist.size() > 0) { // 最后一个人离开之前 > for (int i = 0; i < (3 - 1); i++) { // 如果不是 3 的倍数 > int num = linkedlist.remove(0); // 移除不是 3 的倍数的数,第一次开始为 1 > linkedlist.add(num); // 将不是 3 的倍数的数放在最后,第一次开始是把 1 放在 50 之后 > } > // 未进入 for 循环,说明是 3 的倍数,则从列表中移除 > index = linkedlist.remove(0); > System.out.println("end : " + linkedlist.size() + " \t index: " + index); > } > // while 循环执行完毕,最后一个人已被移除 > System.out.println(index); // 最后一个人开始所站的位置 11 > } > ``` ### 5. 阿姆斯特朗数问题 > #### `例如 153=1^3+5^3+3^3 的数叫做 Armstrong 数,用 java 代码实现输出三位数的 Armstrong 数` > ``` java // 同样还是在主方法里调用 :grin: > public static void armstrongTest() { > int hundredsDigit,tensDigit,unitsDigit;//hundredsDigit表示数字的百位,tensDigit表示数字的十位,unitsDigit表示数字的个位 > System.out.println("寻找Armstrong数:"); > for (int i = 100; i <= 999; i++) { > //No.1 > //开始写代码,例如153可以满足1^3 + 5^3 + 3^3 = 153,这样的数称为Armstrong数,输出所有三位数中的Armstrong数 > hundredsDigit = i / 100; // 获取百位数 > tensDigit = (i % 100) / 10; // 十位数 > unitsDigit = i % 10; // 个位数 > // Math.pow(double a, double b) 返回 a 的 b 次方 > if ((Math.pow(hundredsDigit, 3) + Math.pow(tensDigit, 3) + Math.pow(unitsDigit, 3)) == i) // 如果是Armstrong数则输出 > System.out.print(i + " "); > //end_code > } > System.out.println(); > } > ``` ### 6. 统计指定类型字符个数 > #### `用 java 代码实现输入一串字符串,统计其中的数字、英文、空格、其他字符个数` > ``` java public static void strLength() { int digital = 0;//数字个数 int character = 0;//英文个数 int other = 0;//其他字符个数 int blank = 0;//空格个数 char[] chars = null; System.out.println("这是任意一串字符:"); String string = "djfiepqo ioghr4 8758495 7123hr37hfjW$@@$@^%!"; chars = string.toCharArray(); //No.1 //开始写代码,计算任意一串字符中的数字个数、英文字母个数、空格个数和其他字符个数 for (int i = 0; i < chars.length; i++) { if(chars[i] >= '0' && chars[i] <= '9') { // 数字 digital++; } else if((chars[i] >= 'a' && chars[i] <='z') || (chars[i] >= 'A' && chars[i] <='Z')) { // 英文字母 character++; } else if(chars[i] == ' ') { // 空格 blank++; } else { // 其他字符 other++; } } //end_code System.out.println("数字个数: " + digital); System.out.println("英文字母个数: " + character); System.out.println("空格个数: " + blank); System.out.println("其他字符个数:" + other); } > ``` ### 7. 用递归方法计算一个数的阶乘 > #### `给定一个正整数,Java 实现用递归的方法计算它的阶乘` > ``` java > public class Test { > public static void main(String[] args) { > int number = 12; > Recursion factorialRecursion = new Recursion(); > System.out.println(number + "! = " + factorialRecursion.recursion(number)); > } > } > //No.1 > //开始写代码,给定一个正整数,用递归的方法计算它的阶乘.main函数已给出,实现Recursion类 > class Recursion { > public int recursion(int number) { > if(number < 0) { > System.out.println("请输入0或正整数!"); > return 0; > } else if(number == 1 || number == 0) { > return 1; > } else { > return number * recursion(number - 1); > } > } > } > //end_code > ``` > > 艾玛呀,一不小心又到凌晨了....
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 151 关注
  • 算法
    424 引用 • 254 回帖 • 24 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8217 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 睡觉睡觉

    1 回复
  • 其他回帖
  • someone
    1. 把不是 3 的倍数的数从第一个位置移除,放在最后一个位置,那第一个数就是 3 的倍数,跳出循环后将第一个数(即为 3 的倍数的数)移除;
    2. 泛型的限制对于不同的 JDK 版本有所不同,泛型只在编译阶段起作用,你反编译 class 文件看看。
  • liweiwei

    那个第 3 题,我觉得楼主的答案中 if 判断条件中的 “&& number[j] == number[sumNumber]” 和 “sumNumber++” 是多余的,
    照你的写法,sumNumber 这个变量好像也用不着。
    楼主看是不是?

  • someone

    //创建一个集合 list, List
    //把所有人放进去, for(int i = 1;i <= sum;i++)
    //设置将离开的人的下标 int i = 0;
    //退出的人在集合中的下标 i, 因为 list 下标从 0 开始,所以需要 num-1
    //将集合中该人的元素删除

    为什么评论最大只能 200。。。。我几行的代码还得拆分成 3 次发表。。。
    不过我运行出来得结果 50 和 3 传进去得出也是 11 号,跟你结果一致
    很想了解一下你得这种算法,

  • 查看全部回帖
iTanken
飘风不终朝,骤雨不终日。 北京

推荐标签 标签

  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 3 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 562 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 126 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 3 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 568 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    60 引用 • 29 回帖 • 9 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖 • 2 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 261 关注
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    187 引用 • 831 回帖
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • 反馈

    Communication channel for makers and users.

    120 引用 • 906 回帖 • 279 关注
  • V2Ray
    1 引用 • 15 回帖 • 4 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    438 引用 • 1238 回帖 • 590 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 537 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • danl
    175 关注
  • 996
    13 引用 • 200 回帖 • 5 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 167 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 489 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    93 引用 • 122 回帖 • 618 关注