zoukankan      html  css  js  c++  java
  • 【NYOJ】[65]另一种阶乘问题

    这里写图片描述

    因为涉及到很多重复计算
    所以用了打表法

    #include<stdio.h>
    int main() {
        int a[25]= {0};
        int sum[25]= {0};
        for(int i=1; i<=22; i++) {
            if(i==1) {
                a[1]=1;
                continue;
            }
            if(i&1) {
                a[i]+=a[i-1]*i;
            } else
                a[i]=a[i-1];
        }
        for(int i=1; i<=22; i++) {
            if(i==1) {
                sum[i]=a[i];
                continue;
            }
            sum[i]+=sum[i-1]+a[i];
        }
        int T;
        scanf("%d",&T);
        while(T--) {
            int m;
            scanf("%d",&m);
            printf("%d
    ",sum[m]);
        }
        return 0;
    }
    

    标程用了另一种打表
    也就是通过一个程序先算出来各个数据
    然后实际运行时便可以缩短运行时间

    运行的程序的阶乘是通过递归函数算的
    也是很巧妙
    我现在也有些缺乏使用这些写法的意识

    /*
    #include<iostream>
    using namespace std;
    int f(int n)
    {
        if(n%2) return n==1?1:n*f(n-2);
        return f(n-1);
    }
    int g(int n)
    {
        return n?g(n-1)+f(n):0;
    }
    int main()
    {
        int n,m;
        cin>>n;
        while(n--)
        {
            cin>>m;
            cout<<g(m)<<endl;
        }
    }*/
    #include<iostream>
    using namespace std;
    int main() {
        int n,m,r[]= {0,1,2,5,8,23,38,143,248,1193,2138,12533,22928,158063,293198,2320223,4347248,38806673,73266098,727995173,1382724248};
        cin>>n;
        while(n--) {
            cin>>m;
            cout<<r[m]<<endl;
        }
    }

    题目地址:【NYOJ】[65]另一种阶乘问题

  • 相关阅读:
    三、checkedListBoxControl
    三、安装MyCat-Web
    三、zookeeper安装
    二、.Net 连接mycat
    一、MyCat的搭建
    二、优惠卷
    二、Docker部署应用
    【2019-05-08】感知当下
    【一句日历】2019年7月
    【读书】2019
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569878.html
Copyright © 2011-2022 走看看