ACM试题 - 另一种阶乘问题
1. ACM试题题源:http://acm.nyist.net/JudgeOnline/problem.php?pid=65
描述
大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=1*3*5.现在明白现在这种阶乘的意思了吧!
现在你的任务是求出1!!+2!!......+n!!的正确值(n<=20)
- 输入
- 第一行输入一个a(a<=20),代表共有a组测试数据 接下来a行各行输入一个n.
- 输出
- 各行输出结果一个整数R表示1!!+2!!......+n!!的正确值
- 样例输入
-
2 3 5
- 样例输出
-
5 23
2. 代码
我的代码
1 //运行时间:25ms 内存:184 2 import java.util.Scanner; 3 4 public class Main { 5 6 public static void main(String[] args){ 7 8 Scanner cin = new Scanner(System.in); 9 int a = cin.nextInt(); 10 int[] re = new int[a]; 11 int[] tenNum = new int[10]; 12 for(int i = 0; i < 10; i++){ 13 if(i == 0){ 14 tenNum[i] = 1; 15 }else if(i == 1){ 16 tenNum[i] = 3; 17 }else{ 18 tenNum[i] = tenNum[i-1] * (i*2+1); 19 } 20 } 21 for(int i = 0; i < a; i++){ 22 int n = cin.nextInt(); 23 re[i] = 0; 24 if(n%2==0){ 25 for(int j = 0; j < n/2; j++){ 26 re[i] = re[i] + tenNum[j]; 27 } 28 re[i] = re[i] * 2; 29 }else{ 30 for(int j = 0; j < (n+1)/2; j++){ 31 re[i] = re[i] + tenNum[j]; 32 } 33 re[i] = re[i] * 2 - tenNum[(n+1)/2-1]; 34 } 35 } 36 37 for(int i = 0; i < a; i++){ 38 System.out.println(re[i]); 39 } 40 cin.close(); 41 } 42 }
View Code
参考代码1
1 //运行时间:1ms 内存:122 2 3 public class Main{ 4 5 public static int parseInt(String s){ 6 int i, value, multi=10; 7 8 value = s.charAt(s.length()-1) - 48; 9 for(i=s.length()-2; i>=0; i--){ 10 value += (s.charAt(i) - 48) * multi; 11 multi*=10; 12 } 13 14 return value; 15 } 16 17 public static void main(String args[])throws java.io.IOException{ 18 java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(System.in)); 19 java.io.BufferedWriter bw = new java.io.BufferedWriter(new java.io.OutputStreamWriter(System.out)); 20 StringBuilder result = new StringBuilder(""); 21 String s; 22 int i, j, a, n; 23 long sum=0, tmp=0; 24 25 while((s=br.readLine())!=null){ 26 a = parseInt(s); 27 28 while(a-->0){ 29 n = parseInt(br.readLine()); 30 sum=0; 31 tmp=1; 32 33 for(i=1; i<=n; i++){ 34 for(j=1; j<=i; j+=2){ 35 tmp*=j; 36 } 37 sum+=tmp; 38 tmp=1; 39 } 40 41 result.append(sum).append("\n"); 42 } 43 44 bw.write(result.toString()); 45 bw.flush(); 46 result.setLength(0); 47 } 48 } 49 }
View Code
参考代码2
1 //运行时间:2 内存:61 2 3 import java.util.Scanner; 4 5 public class Main { 6 7 private static Scanner input = new Scanner(System.in); 8 public static void main(String[] args) { 9 int t = input.nextInt(); 10 while (t-- != 0) { 11 int n = input.nextInt(); 12 int sum = 0; 13 for (int i = 1; i < n+1; i++) { 14 sum += jiechen(i); 15 } 16 System.out.println(sum); 17 } 18 } 19 private static int jiechen(int i) { 20 int sum = 1; 21 for (int j = 1; j < i+1; j += 2) { 22 sum *= j; 23 } 24 return sum; 25 } 26 }
View Code
3. 总结
不难看出别人的代码不论是在时空复杂度还是在代码的易阅读性上面,都很健壮。而我的就很一般化了,还有要学习别人引用包后的使用方式,变量定义的方式,要学会把问题子问题化。
转载于:https://www.cnblogs.com/louislee92/p/3949270.html
ACM试题 - 另一种阶乘问题相关推荐
- ACM试题 - ASCII码排序 - Java中字符与对应ASCII码的转换
Java中字符转换对应ASCII码有两种方式: 第一种: char c = 'a'; byte b = (byte)c; // b=97 第二种: char c = 'a'; int b = c; / ...
- ACM试题 - 括号配对问题 - Java中字符串截取和定位问题
ACM试题题源(括号配对问题):http://acm.nyist.net/JudgeOnline/problem.php?pid=2 提交代码: import java.util.Scanner;pu ...
- 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)
赛马网ACM试题(原杭电OJ ACM试题)答案(java版) Author : Zhang Hailong Date : 2015-09-17 HomePage : http:// E ...
- ACM MM:一种基于情感脑电信号时-频-空特征的3D密集连接网络
本文介绍一篇于计算机领域顶级会议ACM MM 2020发表的论文<SST-EmotionNet: Spatial-Spectral-Temporal based Attention 3D Den ...
- 用户故事 | 刷算法面试题的4种思考方式
不管是为了求职面试,还是为了提高自己的算法基础能力,"刷算法题"都是每个程序员的必经之路.如何对待刷题?如何让刷题变得更高效?我们搜集了来自<算法面试通关 40 讲>的 ...
- NYOJ65 - 另一种阶乘问题
描述 大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=1*3*5.现在明白现在这种阶乘的意思 ...
- Java高频面试题:四种经典限流算法,有哪四种?
前言 一.限流操作: 为什么限流一键获取最先java文档. 是防止用户恶意刷新接口,因为部署在外部服务器,并且我们采用websocket的接口实现的,公司没有对硬件升级,导致程序时长崩溃,为了解决这个 ...
- 一道大厂Python面试题,4种解法,从青铜到王者引发的“思考”!
"菜鸟学Python",第"518"篇原创 金九银十应该是校招的黄金时间,大家都知道去大厂面试,算法是一个必须要过的关,无论是笔试还是面试的环节都需要.而算法这 ...
- 杭电acm第2304题答案c语言,【转】杭电ACM试题分类
注:网上搜的 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 ...
最新文章
- Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)
- Android Studio 中删除项目和项目找回------ Project Structure的使用
- 栈,寄存器,局部变量,内存,语言级别优化程序的方法
- 【数据库】数据库的四个基本概念Data DB DBMS DBS
- C++ 单例模式中处理在类中声明一个指向一个自己的指针,在编译时显示定义的指针未定义的处理办法
- java opencv 阀值分割_利用OpenCV实现局部动态阈值分割
- Operation not applicable
- .NET开发必看资料53个+经典源码77个(转)
- win7下装linux虚拟机,win7怎么在虚拟机安装linux系统|win7搭建linux虚拟机的方法
- r语言 月度消费频次_R语言基础-数据分析及常见数据分析方法
- ios app图标尺寸设置
- 用PS做一个简单的相机图标
- 最简示例 简介洗牌函数 之 __shfl_sync() cuda 之 shuffle
- (十)DSP28335基础教程——ECAP实验(超声波测距)
- SpringCloud熔断机制大概什么意思
- Java jdt 编辑_JDT:打开Java编辑器并显示特定成员
- 电赛公开课整理(一),电路基础,截图+模电知识【15000字】【原创】
- JavaScript实时获取现货黄金,白银,美元指数价格代码
- 新开淘宝店铺如何推广运营
- postman测试body中不传参数
热门文章
- redis stream持久化_一文了解:Redis的RDB持久化
- 长春理工计算机学院保研外校,长春理工大学计算机科学技术学院(专业学位)软件工程保研...
- Linux文本编辑跳到指定行,Linux 命令每日一练:vi命令
- 银行的相关计算机知识,银行计算机基础知识试题及答案正式版.doc
- (2) websocket 实现群聊
- CSS3给网页穿上美丽的外衣
- 计算机考研:计算机组成原理考点分析
- 大数据 机器学习 算法概论
- 删除mysql数据库中所有表
- 学习nginx接口调用之摘录