牛客每日练习----银行存款,阶乘和,数字方阵

我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力。                                      ----喻言

链接:https://ac.nowcoder.com/acm/problem/15360
来源:牛客网
 

题目描述

银行的定期存款一般有1年期、2年期、3年期、5年期四种。
现在我们有1块钱,我们想知道,通过合理安排存款方式,n年以后这1块钱最多会变成几块钱。
假设在这n年里利率不变,且n年以后这笔钱不能处于2年期、3年期、5年期存款年限的中间(否则会变成活期)。

输入描述:

第一行五个数n, r1, r2, r3, r5分别表示年数,1年期年利率,2年期年利率,3年期年利率和5年期年利率。
假设我们有1块钱,i年期存款到期后这1块钱会变成(1 + ri)i块钱。
1 <= n <= 20 且 n为整数,
0.04 <= r1 <= r2 <= r3 <= r5 <= 0.05;

输出描述:

一行一个数表示答案。保留5位小数(绝对误差或相对误差在1e-5之内的结果均判断为通过)。

示例1

输入

复制

8 0.0430 0.0449 0.0458 0.0473

输出

复制

1.44112
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=998244353 ;  
const int N=3010;
int n;
double r[10],dp[30];
int main()
{
    cin>>n>>r[1]>>r[2]>>r[3]>>r[5];
    dp[0]=1;
    for(int i=1;i<=5;i++)
    {
        if(i==4) 
			i++;
        for(int j=i;j<=n;j++)
        dp[j]=max(dp[j],dp[j-i]*pow(1+r[i],i));
    }
    cout<

链接:https://ac.nowcoder.com/acm/problem/15375
来源:牛客网
 

题目描述

阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

n!=1×2×3×...×n

现给定整数n,求阶乘和1!+2!+...+n!

(要求使用C语言)

输入描述:

输入正整数n

输出描述:

输出一个整数,即阶乘和

示例1

输入

复制

2

输出

复制

3

说明

1+1*2

示例2

输入

复制

3

输出

复制

9

说明

1+1*2+1*2*3=9

备注:

n>1,结果小于10^9
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=998244353 ;  
const int N=3010;
int n,sum;
int dg(int n){
    if(n<0)
		return -1;
    if(n==0)
		return 1;
    return n*dg(n-1);
}
  
int main(){
    scanf("%d", &n);
    for(int i=1;i<=n;i++)
        sum+=dg(i);
    printf("%d\n",sum);
    return 0;
}

链接:https://ac.nowcoder.com/acm/problem/15384
来源:牛客网
 

题目描述

Eteˊreo\mathrm{Et\acute{e}reo}Eteˊreo 总是对数字的神秘感感到好奇。这次,他在纸上写下了 K2\mathfrak{K}^2K2 个从 111 到 K2\mathfrak{K}^2K2 的数字,并把这些数字排成了 K×K\mathfrak{K} \times \mathfrak{K}K×K 的方阵。他惊奇地发现,这个方阵中每行、每列和两条主对角线上的数字之和都不一样。他想要更多的方阵,但他再写不出来了。于是他㕛跑来找你,请你给他一个边长为 K\mathfrak{K}K 的满足上述性质的方阵。

输入描述:

输入共一行,一个整数 K\mathfrak{K}K ,意义同题面描述。

输出描述:

输出共 K\mathfrak{K}K 行,每行 K\mathfrak{K}K 个整数,表示答案方阵。
输出任意一种可行方案即可。

示例1

输入

复制

3

输出

复制

1 2 3
8 9 4
7 6 5

备注:

3≤K≤10003 \leq \mathfrak{K} \leq 10003≤K≤1000
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=998244353 ;  
const int N=3010;
int n, ct, a[N][N];
int main()
{
    cin>>n;
    for(int i=1; i<=n; i++)
        for(int j=1; j

 

你可能感兴趣的:(牛客网)