首页 > 试题广场 >

阶乘

[编程题]阶乘
  • 热度指数:22719 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。

输入描述:
每组输入包括1个整数:n


输出描述:
可能有多组测试数据,对于每组数据,
输出题目要求的y1和y2
示例1

输入

4

输出

7 26

python 4 lines solution:

from math import factorial as f

while True:
    try:
        a, odd, even = int(input()), 0, 0
        for i in range(2, a + 1, 2):            even += f(i)
        for i in range(1, a + 1, 2):            odd += f(i)
        print(str(odd) + " " + str(even))

    except:
        break
发表于 2017-10-01 17:05:15 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    
    public static void main(String[] args) throws NumberFormatException, IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        Main m = new Main();
        while ((line = br.readLine()) != null) {
            int number = Integer.parseInt(line);
            m.factorial(number);
        }
    }
    
    public void factorial(int n){
    	int temp,sum1,sum2;
    	temp = 1;
    	sum1 = 0;
    	sum2 = 0;
    	for(int i = 1; i <= n; i++){
    		temp *= i;
    		if(i % 2 == 1){
    			sum1 += temp; 
    		}else{
    			sum2 += temp;
    		}
    	}
    	System.out.println(sum1 + " " + sum2);
    }
    
}

发表于 2017-03-05 15:20:20 回复(3)
import java.util.*;
public class Main{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int n = sc.nextInt();
			int y1=0, y2=0;
			for(int i=2;i<=n;i=i+2){
				y2+=f(i);
			}
			for(int i=1;i<=n;i=i+2){
				y1+=f(i);
			}
			System.out.println(y1+" "+y2);
		}
	}
	public static int f(int n){
		if(n==0) return 1;
		if(n==1) return 1;
		return f(n-1)*n;
	}	
}

发表于 2016-08-20 22:27:29 回复(0)
import java.util.Scanner;
public class Main{

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
if(n%2==0){
System.out.println(f2(n-1)+" "+f2(n));
}else{
System.out.println(f2(n)+" "+f2(n-1));
}
}
}
public static int f1(int n){
if(n>0){
return n*f1(n-1);
}else{
return 1;
}
}
public static int f2(int n){
int res=0;
while(n>0){
res+=f1(n);
n-=2;
}
return res;
}
发表于 2017-04-18 12:24:43 回复(0)
import java.util.Scanner;
public class test {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while(in.hasNext()){
			int x = in.nextInt();
			pro(x);
			
		}
	}
	private static void pro(int x) {
		int y1 = 0,y2 = 0;
		int temp = 1;
		for(int i = 1;i<=x;i++){
			
			if(i%2!=0){//奇数
				y1+=temp*i;
			}else{
				y2+=temp*i;
			}
			temp = temp*i;
			
		}
		System.out.println(y1+" "+y2);
	}
}

发表于 2016-11-28 13:31:11 回复(0)
#include <stdio.h>
int table[50]={1,1};
int ***(int n){
    if(table[n]==0)
        table[n]=n****(n-1);
    return table[n];
}
int main(){
    int n;
    while(~scanf("%d",&n)){
        int y1=0,y2=0;
        for(int i=1; i <= n;i += 2)
            y1 += ***(i);
        for(int i=2; i <= n;i += 2)
            y2 += ***(i);
        printf("%d %d\n",y1,y2);
    }
    return 0;
}
编辑于 2016-07-31 07:21:10 回复(3)
/*
*题目也没说清除数据规模,差点模拟高精度。
*/

#include<bits/stdc++.h>
#define ll long long

using namespace std;

int n;

void getFacts(ll& ans1, ll& ans2)
{
    ans1 = ans2 = 0;
    int ans = 1;
    for(int i = 1;i <= n; i++)
    {
        ans *= i;
        if(i & 1) ans1 += ans;
        else ans2 += ans;
    }
}

int main()
{
    ios::sync_with_stdio(false);
    while(cin >> n)
    {
        ll ans1, ans2;
        getFacts(ans1, ans2);
        cout << ans1 << ' ' << ans2 << '\n';
    }
    return 0;
}

发表于 2021-01-22 11:35:44 回复(0)
#include <iostream>
#include <vector>
using namespace std;
vector<int> res(1000,-1);
int Cal(int i){
    if(res[i]!=-1)
        return res[i];
    else
        return res[i]=Cal(i-1)*i;
}
int main(){
    res[0]=1;
    res[1]=1;
    int n;
    while(cin>>n){
        int y1=0,y2=0;
        for(int i=1;i<=n;i+=2)
            y1+=Cal(i);
        for(int i=2;i<=n;i+=2)
            y2+=Cal(i);
        cout<<y1<<' '<<y2<<endl;
    }
    return 0;
}

编辑于 2020-05-03 16:35:22 回复(0)
#include<stdio.h>
int main()
{
    int i,j,ji,ou,sumji=0,sumou=0,n;
    scanf("%d",&n);
    for(i=1;i<=n;i+=2)//奇数阶乘从1开始
    {
		ji=1;//初始化
        for(j=1;j<=i;j++)
            ji*=j;//1!或3!
        sumji+=ji;//1!+3!
    }
    for(i=2;i<=n;i+=2)//偶数阶乘从2开始
    {
		ou=1;//初始化
        for(j=1;j<=i;j++)
            ou*=j;
        sumou+=ou;
    }
    printf("%d %d\n",sumji,sumou);
}

发表于 2020-03-30 20:46:41 回复(0)
#include<stdio.h>

int factorial(int n){
    int dp[n+1];
    dp[1] = 1;
    for(int i=2;i<=n;i++)
        dp[i] = i*dp[i-1];
    return dp[n];
}

int y1(int n){
    int sum = 0;
    int m = 1;
    while(m<=n){
        sum += factorial(m);
        m += 2;
    }
    return sum;
}

int y2(int n){
    int sum = 0;
    int p = 2;
    while(p<=n){
        sum += factorial(p);
        p += 2;
    }
    return sum;
}

int main(){
    int n;
    while(scanf("%d",&n)!=EOF)
        printf("%d %d\n",y1(n),y2(n));
    return 0;
}

发表于 2020-03-09 20:41:55 回复(0)
#include<stdio.h>
#include<stdlib.h>
int fibo(int);
int main(){
    int n;
    int y1=0,y2=0;
    int n1,n2;
    int i;
    while(scanf("%d",&n)!=EOF){
        if(n%2==0){
            n1=n-1;
            n2=n;
        }
        else{
            n1=n;
            n2=n-1;
        }
        for(i=1;i<=n1;i=i+2){
            y1=y1+fibo(i);
        }
        for(i=2;i<=n2;i=i+2){
            y2=y2+fibo(i);
        }
        printf("%d %d\n",y1,y2);
    }
    return 0;
}
int fibo(int n){
    if(n==1){
        return 1;
    }
    if(n==2){
        return 2;
    }
    return fibo(n-1)*n;
}
发表于 2020-01-08 16:47:59 回复(0)
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int jiecheng(int mubiao)
{ int j=1;
    for(int i=1;i<=mubiao; i++)
    {
       j=i*j;
    }
    return j;
}
int main()
{  int n=0 ;
cin>>n;
 int h1,h2,k=0,k1=0;
   {
       for (int m=1;m<=n;m++)
   {
    if (m%2==1)
 {
            h1=jiecheng(m)+k;
            k=h1;
 }
 else if(m%2==0)
 {
            h2=jiecheng(m)+k1;
            k1=h2;
 }
   ;};
   };
   cout<<h1<<' '<<h2;
}
编辑于 2019-02-25 19:25:52 回复(1)
n,g = int(input()),lambda n:n if n == 1 or n == 0 else n*g(n-1)
print(sum(g(i) for i in range(1,n+1,2)),sum(g(j) for j in range(2,n+1,2)))
Two Line Python Solution
发表于 2018-07-05 02:00:17 回复(0)
#include<stdio.h>

int main(){
    int n;
    int i;
    int y1=0,y2=0;
    int s=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        s=s*i;
        if(i%2==1)
            y1=y1+s;
        else
            y2=y2+s;
    }
    printf("%d %d",y1,y2);
    return 0;
}
发表于 2018-06-03 19:16:41 回复(0)
#include <stdio.h>

int main(void){
    
    int n, y1, y2, i, sum;
    
    while(scanf("%d", &n) != EOF){      
        i = sum = 1;
        y1 = y2 = 0;
        
        while(i < n){
            sum *= i;
            y1 += sum;
            ++i;
            sum *= i;
            y2 += sum;
            ++i;
        }
        printf("%d %d\n", n & 1 ? y1 + sum * i : y1, y2);
    }  
    
    return 0;
}

发表于 2018-04-18 07:04:05 回复(0)

include<stdio.h>

include<string.h>

int mul(int a,int n,int m) //求阶乘
{
int i,j,k,x,y;
i=1;
a[1]=1;
for(j=2;j<=m;j++)
{
for(k=1;k<=i;k++)
a[k]=a[k]
j;
for(k=1;k<=i;k++)
{
if(a[k]>=10)
{
x=a[k]/10;
y=a[k]%10;
a[k]=y;
a[k+1]=a[k+1]+x;
if(k==i)
i++;
}
}
}
return i;
}
int main()
{
int n,len1;
while(scanf("%d",&n)!=EOF)
{
int a[5000],b[5000];
int i,j,x,y;
memset(b, 0, sizeof(b));
for(i=1;i<=n;i+=2)
{
memset(a, 0, sizeof(a));
len1=mul(a,5000,i);
for(j=1;j<=len1;j++)
{
b[j]=a[j]+b[j];
if(b[j]>=10)
{
x=b[j]/10;
y=b[j]%10;
b[j]=y;
b[j+1]=b[j+1]+x;
}
}
}
for(j=len1+1;j>=1;j--)
{
if(j==len1+1&&b[j]!=0)
printf("%d",b[j]);
if(j!=len1+1)
printf("%d",b[j]);
}
printf(" ");
memset(b, 0, sizeof(b));
for(i=2;i<=n;i+=2)
{
memset(a, 0, sizeof(a));
len1=mul(a,5000,i);
for(j=1;j<=len1+1;j++)
{
b[j]=a[j]+b[j];
if(b[j]>=10)
{
x=b[j]/10;
y=b[j]%10;
b[j]=y;
b[j+1]=b[j+1]+x;
}
}
}
for(j=len1+1;j>=1;j--)
{
if(j==len1+1&&b[j]!=0)
printf("%d",b[j]);
if(j!=len1+1)
printf("%d",b[j]);
}
printf("\n");

}
return 0;

}

发表于 2018-01-07 23:31:56 回复(0)
#include<iostream>
using namespace std;
int nc(int n){
    if(n==1) return n;
    else return n*nc(n-1);
}
int main(){
    int n;
    while(cin>>n){
        int m,p,k=0,y1=0,y2=0;
        for(m=1,p=2;k<=n/2;m=m+2,p=p+2){
            if(m<=n)
                y1=y1+nc(m);
            if(p<=n)
                y2=y2+nc(p);
            k++;
        }
        cout<<y1<<" "<<y2<<endl;
    }
}

编辑于 2018-01-06 18:06:21 回复(0)
#include <iostream>
using namespace std;
int main(){
    int n,i,k;
    while(cin>>n){
        int y1=0,y2=0;
        for(i=1;i<=n;i=i+2){
            int temp=1;
            for(k=i;k>0;k--)
                temp*=k;
            y1+=temp;
        }
        for(i=2;i<=n;i=i+2){
            int temp=1;
            for(k=i;k>0;k--)
                temp*=k;
            y2+=temp;
        }
        cout<<y1<<" "<<y2<<endl;
    }
    return 0;
}

发表于 2017-11-29 19:27:37 回复(0)
#include<iostream>
int jie(int n){
    if(n==1||n==2){
        return n;
    }
    else{
        return n*jie(n-1);
    }
}
int main(){
    int num;
    while(std::cin>>num){
        int y1=0,y2=0;
        for(int i=1;i<=num;i++){
            if(i%2!=0){
                y1+=jie(i);
            }
            else{
                y2+=jie(i);
            }
        }
        std::cout<<y1<<" "<<y2<<std::endl;
    }
    return 0;
}

发表于 2017-06-29 21:58:12 回复(0)
import java.util.Scanner;

/**
 * m是小于等于n的最大奇数
 * p是小于等于n的最大偶
    * 由题可想出直接用循环从i到N,如果i能整除2就是偶数既小于等于N的偶数
 */
public class Main {

public static void main(String[] args) {
int res ,resd;
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
res=resd=0;
int n = sc.nextInt();
for(int i=1;i<=n;i++){
if(i%2==0){
res += jieceng(i);
}else{
resd +=jieceng(i);
}
}
System.out.println(resd+" "+ res);
}
}

public static int jieceng(int num){
int totle=1;
for(int i=1;i<=num;i++){
totle *=i; 
}
return totle;
}
   }

发表于 2017-06-05 09:51:16 回复(0)

问题信息

难度:
210条回答 22736浏览

热门推荐

通过挑战的用户

查看代码