【编程马拉松算法目录>>>】


【008-快到碗里来】【工程下载>>>】


1 题目描述


  小喵们很喜欢把自己装进容器里的(例如碗),但是要是碗的周长比喵的身长还短,它们就进不去了。现在告诉你它们的身长,和碗的半径,请判断一下能否到碗里去。

1.1 输入描述:


  输入有多组数据。每组数据包含两个整数n (1≤n≤2^128) 和r (1≤r≤2^128),分别代表喵的身长和碗的半径。圆周率使用3.14。

1.2 输出描述:


  对应每一组数据,如果喵能装进碗里就输出“Yes”;否则输出“No”。

1.3 输入例子:


6 1
7 1
9876543210 1234567890

1.4 输出例子:


Yes
No
No

2 解题思路


  题目中输入的数值比较大,所以不能使用一般的字数字进行计算,要使用大整数乘法思想。
  假设猫的长度是 m(m=xi−1xi−2…x0) m(m=x_{i-1} x_{i-2}…x_0),碗的半径是 n(n=xj−1xj−2…x0) n(n=x_{j-1} x_{j-2}…x_0),π取3.14。只要比较n和2*m*π的大小就可以判断猫是否可以进入碗里。因为m、n不能使用数字来表示,可以使用数组a、b来表示他们。同时因为π是小数,要将m、n、π统一成整数进行运算。可以将m放大100倍,π放大100倍。a[0]=0,a[1]=0,表示放大100倍,a[k]表示m中的 xk−2 x_{k-2},b[k]表示n中的 xk x_k。π使用数组PI表示。PI[0]=4,PI[1]=1,PI[2]=3。计算2*b*PI(结果为r)再比较r与n的大小即可。

3 算法实现


import java.util.Scanner;/*** Author: 王俊超* Time: 2016-05-09 08:44* CSDN: http://blog.csdn.net/derrantcm* Github: https://github.com/Wang-Jun-Chao* Declaration: All Rights Reserved !!!*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));while (scanner.hasNext()) {String cat = scanner.next();String bowl = scanner.next();System.out.println(toTheBowl(cat, bowl));}scanner.close();}/*** 判断猫是否可以进到碗里** @param cat  猫的长度* @param bowl 碗的半径* @return Yes:猫可以到碗里,false:猫不可以到碗里*/private static String toTheBowl(String cat, String bowl) {// 200*PIint[] PI = {8, 2, 6};// cat的值要放大100倍int[] n = new int[cat.length() + 2];int[] m = new int[bowl.length()];// 将cat转换成数值,并且放大100倍for (int i = 0; i < cat.length(); i++) {n[i + 2] = cat.charAt(cat.length() - i - 1) - '0';}// bowl转换成数值for (int i = 0; i < bowl.length(); i++) {m[i] = bowl.charAt(bowl.length() - i - 1) - '0';}int[] r = calculate(m, PI);if (compare(r, n) >= 0) {return "Yes";} else {return "No";}}/*** 比较两个整数是否相等,下标由小到大表示由低位到高位,忽略最高有效位上的前导0** @param m 整数* @param n 整数* @return m > n返回1,m = n返回0,m < n返回-1*/private static int compare(int[] m, int[] n) {if (m == null && n == null) {return 0;}// null最小if (m == null) {return -1;}if (n == null) {return 1;}int lastM = m.length - 1;int lastN = n.length - 1;// 找m的最高有效位的位置,至少有一位while (lastM >= 1 && m[lastM] == 0) {lastM--;}// 找n的最高有效位的位置,至少有一位while (lastN >= 1 && n[lastN] == 0) {lastN--;}// m的数位比n多,说明m比n大if (lastM > lastN) {return 1;}// m的数位比n少,说明m比n小else if (lastM < lastN) {return -1;} else {// 位数一样,比较每一个数位上的值,从高位到低位进行比较for (int i = lastM; i >= 0; i--) {if (m[i] > n[i]) {return 1;} else if (m[i] < n[i]) {return -1;}}return 0;}}/*** 两个数相乘** @param m 乘数* @param n 乘数* @return 结果*/private static int[] calculate(int[] m, int[] n) {if (n == null || n.length < 1 || m == null || m.length < 1) {return null;}// 结果最多的位数int[] r = new int[m.length + n.length];// 来自低位的进位int c;int t;int k;for (int i = 0; i < n.length; i++) {// 计算n[i]*mif (n[i] == 0) {continue;}c = 0;for (int j = 0; j < m.length; j++) {t = n[i] * m[j] + r[i + j] + c;r[i + j] = t % 10;c = t / 10;}// 如果还有进位要继续处理k = i + m.length;while (c != 0) {t = c + r[k];r[k] = t % 10;c = t / 10;k++;}}return r;}
}

4 测试结果


5 其它信息


因为markddow不好编辑,因此将文档的图片上传以供阅读。Pdf和Word文档可以在Github上进行【下载>>>】。

【编程马拉松】【008-快到碗里来】相关推荐

  1. 近期活动盘点: Call for Code编程马拉松邀请赛

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: 关于代码行动 "代码行动"(Call for Code)是IBM联合Linux基金会.红十字会等组织发起的一项为期5年 ...

  2. Hugging News #0113:DreamBooth 编程马拉松活动保姆级视频教程来了!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  3. IBM PowerAI人工智能12小时编程马拉松大赛——“我是大侦探”成功落幕

    3月18日,由IBM和CSDN共同主办,主题为"IBM PowerAI人工智能12小时编程马拉松大赛--我是大侦探!"活动在北京维景国际大酒店成功举办.本次活动在国内人工智能算法领 ...

  4. Qualcomm LTE 物联网应用开发者大赛36小时编程马拉松完美收官!

    截止至12月22日晚上8点,Qualcomm LTE 物联网应用开发者大赛--36小时编程马拉松完美落幕!"壁挂炉远程控制"项目,致力于解决客户在使用传统壁挂炉时面对的各种困难与不 ...

  5. Qualcomm LTE物联网应用开发者大赛—36小时编程马拉松在深启动

    12月21日,由Qualcomm 主办.机智云和移远通信共同协办.CSDN承办的行业内最具专业性质"Qualcomm LTE 物联网应用开发者大赛"在深圳华强北赛格众创空间举行.经 ...

  6. 【编程马拉松】【006-统计一】

    [编程马拉松算法目录>>>] [006-统计一][工程下载>>>] 1 题目描述 NewCode总是力争上游,凡事都要拿第一,所以他对"1"这个 ...

  7. 【编程马拉松】【026-是男人就下100层】

    [编程马拉松算法目录] [026-是男人就下100层][工程下载>>>] 1 题目描述 相信大家都听说过"是男人就下100层"系列游戏,游戏中包括多个长度和高度各 ...

  8. 10000+ gif表情包不是梦,get这一篇文就够了!!!小哥哥快到碗里来,再也不怕斗图没有表情包了

    10000+ gif表情包不是梦,get这一篇文就够了!!!小哥哥快到碗里来,再也不怕斗图没有表情包了 1. 依赖模块及安装 2. 查找网页规律 3. 源码 最近看的爬虫的博客太多,小小的学习了下.主 ...

  9. 报名 | 赢取20万美金!Call For Code编程马拉松北京站来袭!

    你想通过技术改变未来的世界,并挽救生命吗? 你想组织小伙伴一同参赛,并获得20万美金吗? 你想和全球专业的开发者一同开发,并学习最前沿的AI.IoT等技术吗? 如果你内心中的答案是肯定的话...... ...

最新文章

  1. 进程状态控制-进程创建
  2. 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )
  3. python入门之函数调用第一关_零基础学习 Python 之与函数的初次相见
  4. 读源码学C之阅读李恒的bioawk
  5. mongodb 部署
  6. 组件使用中的细节点02
  7. mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解
  8. 基本数据类型的分类 0125
  9. C++动态空间申请、动态对象(new与delete运算)
  10. STM8单片机通过PWM触发ADC同步采样
  11. 连续一个月,每天只吃一个苹果,身体会怎么样?
  12. 哈佛机器人,学会了轻功水上漂
  13. Java21天打卡day18--继承
  14. linux开发 stc_Linux环境下搭建STC单片机平台的指南
  15. 网易云音乐显示网络异常
  16. 批处理重置IE、批处理清理浏览器缓存、默认以管理员权限运行批处理
  17. 安卓改机技术揭秘(一) 工具篇
  18. Win11怎么打开网络发现?Win11启用网络发现教程
  19. numpy.median()
  20. 这台计算机上没有安装驱动程序,这台计算机上没有安装‘HP LaserJet Pro M402-403 PLC6'打印机驱动程序,如果不安装...

热门文章

  1. 出差在外,领导的同学请吃饭,问你“去不去”,会来事说3个话术
  2. 为什么Python多线程反而更慢了?
  3. Tomcat服务器配置https认证(使用keytool生成证书)
  4. 2007年最新学习资源大全
  5. CentOS 7 离线安装配置 erlang
  6. Linux 创建(删除)连接命令 ln -s 软连接
  7. DeathNote 靶场渗透记录
  8. Oracle 模糊查询like用法
  9. numpy创建kdtree
  10. 针对公共安全的GIS技术应用详情