【华科考研机试题】阶乘

题目

输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。

解题思路

打表算最快,不用每个数据都算一次。

复杂度

时间复杂度(输入的数据量O(m))
空间复杂度O(1)

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

//实际上算到30的阶乘肯定溢出了
//但是没关系,题目给的肯定不是溢出的数据
ll jc[30]; //jc[i]表示i的阶乘
ll ans[30]; // ans[i]表示奇、偶数项阶乘和
int main(){
    //算1~30的阶乘
    jc[0] = 1;
    for(int i = 1;i < 30; ++i){
        jc[i] = jc[i-1]*i;
    }
    //算奇、偶数项阶乘和
    ans[1] = 1;
    for(int i = 2;i < 30; ++i){
        ans[i] = ans[i-2] + jc[i];
    }

    //每个n直接判断奇偶输出即可
    //不用每个数据再算一次阶乘
    ll n;
    while(cin >> n){
        if(n%2){
            cout << ans[n] << " " << ans[n-1] << endl;
        }else{
            cout << ans[n-1] << " " << ans[n] << endl;
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhangjiuding/p/10421403.html

时间: 2024-10-09 17:51:08

【华科考研机试题】阶乘的相关文章

【华科考研机试题】最长&amp;最短文本

题目 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出. 解题思路 1.输入所有字符串(有空格不另算字符串). 2.将char*字符串转换成string型. 3.由于map是自动排好序的,所以begin和end可以取到最小的地址和最大的后一个地址. map <int,list<string>>m;//构造map m[s.length].push_back(s);//map插入 list l = m.begin()->s

考研机试题(2014)

1.求一串数中大于1素数之和 输入输入个数  数字  不超过100个数 不超过10组 多组输入  0结束 例 输入 4 1 2 3 4 5 1 2 3 4 5 0 输出 5 10 #include <stdio.h> #define MAX 10 bool isPrime(int n){ //判断是否是素数 bool flag = true; if( n <=1) return false; for(int i = 2; i*i <= n; i++){ if(n % i == 0)

考研复试机试题(2010)

考研复试机试题(2010) 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 * 日期: 2014/7/21 */ #include "stdio.h" #define Max 1000 int getEveSum(int num){ //求各位的数字和 int sum = 0; while(num

考研复试机试题(2009)

Problem A:请写一个程序,给出指定整数范围[a ,b]内所有的完数,一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数,例如6是完数,因为6=1+2+3. 输入说明:共一组数据,为两个正整数,分别表示a和b(1<a<b<10^5). 输出说明:指定范围内的所有完数,每个数占一行. 输入样本 1 100 输出样本 6 28 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 *

九度oj题目&amp;amp;吉大考研10年机试题全解

吉大考研机试2010年题目 题目一(jobdu1478:三角形的边).    http://ac.jobdu.com/problem.php?pid=1478 给出三个正整数,计算最小的数加上次小的数与最大的数之差. 题目分析: 简单题.能够用非常多方法解决 AC代码: #include<iostream> using namespace std; int main() {     int a,b,c,ma;     while(cin>>a>>b>>c){

华为的一道机试题--等式变换

华为的一道机试题 (http://blog.csdn.net/zombie_slicer/article/details/37346025) 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入:       正整数,等式右边的数字 输出:       使该等式成立的个数 样

ASPNET服务端控件练习(一个机试题)

简单记录: 模糊查询的select语句的拼写 public List<Model.Student> GetWhereStudent(string name, string sub, string isG) { List<Web.Model.Student> lt = new List<Model.Student>(); string sql = "select * from SC_Student where studentName like @n and [e

华为2014机试题(一)

过几天就要进行华为的机试了,今儿临时抱抱佛脚,在网上找到2014届华为校招的机试题,琢磨了一会儿,贴出来记录下. 首先感谢一下Hackbuteer提供的题目:http://blog.csdn.net/hackbuteer1/article/details/11132567 对于第一题,字符过滤.最简单也是最直接的就是HASH.题目规定了输入序列只能为小写字符'a~z'.因此直接开辟一个大小为26的数组用于记录当前字符是否已经出现即可. 需要注意的问题: 1. hash数组记得初始化 2. pOu

Java基础机试题

package day8;import java.util.Scanner;/** * Java基础机试题 * @author:lyrand * */public class convert {        static void exitContinue(){                while (true){            System.out.print("你想继续吗?(y/n)");            Scanner sc = new Scanner(Sys