java算法-另一种阶乘问题(程序优化)

    xiaoxiao2021-03-26  32

    另一种阶乘问题

    时间限制:3000 ms  |  内存限制:65535 KB

    难度:1

    描述

    大家都知道阶乘这个概念,举个简单的例子: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 来源[张洁烽]原创 /*  * 另一种阶乘问题  * 思路:此题为简单的算法题:唯一要做的就是优化程序  * 看下面的数:  * 1!!=2!!=1  * 3!!=4!!=3  * 5!!=6!!=15  * 7!!=8!!=105  * 有因为你n<=20这里就可以先写个辅助郑旭计算出  * 所有奇数的双阶乘然后在在程序中存储,以节约计算时间消耗  * 辅助程序如下:  */

    public class Main {  public static void main(String[] args) {   int sum = 1;   for (int i = 1; i < 20; i += 2) {    sum *= i;    System.out.print(sum+",");   }  } } 运行结果:1,3,15,105,945,10395,135135,2027025,34459425,654729075, /*  * 主程序如下:  */ import java.util.Scanner;

    public class Main {  public static void main(String[] args) {   Scanner sc = new Scanner(System.in);   int ary[] = { 1, 3, 15, 105, 945, 10395, 135135, 2027025, 34459425,     654729075 };   int a = sc.nextInt(), n, sum;   while (a-- > 0) {    n = sc.nextInt();    sum = 0;    for (int i = 0; i < ary.length; i++) {     if (n >= (i * 2 + 2)) {      sum += ary[i] * 2;     } else {      if (n >= (i * 2 + 1)) {       sum += ary[i];      }      else{       break;      }     }    }    System.out.println(sum);   }  } }

     

    转载请注明原文地址: https://ju.6miu.com/read-660060.html

    最新回复(0)