当前位置: 首页 > article >正文

ZZNUOJ(C/C++)基础练习1051——1060(详解版)

1051 : 求数列的和

题目描述

数列的定义如下: 
数列的第一项为item,以后各项为前一项的平方根,求数列的前n项的和。 

输入

由两个整数item(item<10000)和n(n<1000)组成,item和n的含义如前所述。 

输出

 输出该数列的和,占一行,要求精度保留2位小数。

样例输入 

84 4

样例输出

97.93

C语言版

#include<stdio.h>  // 包含标准输入输出库
#include<math.h>   // 包含数学函数库,用于调用 sqrt 函数

int main()
{
    int item, n, i;  // 定义变量:item 为初始值,n 为迭代次数,i 为循环计数器
    double mid, sumN = 0;  // 定义变量:mid 用于存储当前值,sumN 用于存储累加和,初始化为 0

    // 从用户输入中读取初始值 item 和迭代次数 n
    scanf("%d%d", &item, &n);

    // 将初始值赋值给 mid,作为第一次迭代的起始值
    mid = item;

    // 循环 n 次,计算平方根序列的和
    for (i = 0; i < n; i++)
    {
        // 将当前 mid 的值累加到 sumN 中
        sumN += mid;

        // 更新 mid 为当前 mid 的平方根
        mid = sqrt(mid);
    }

    // 输出最终的累加和,保留两位小数
    printf("%.2f\n", sumN);

    return 0;  // 程序正常结束
}

 C++版

#include<iostream>       // 包含标准输入输出流库
#include<cmath>          // 包含数学函数库,用于调用 sqrt 函数
#include<iomanip>        // 包含输入输出格式控制库,用于设置输出格式
using namespace std;     // 使用标准命名空间,避免重复书写 std::

// 定义一个宏 av(y),用于设置输出精度为 y 位小数,并固定小数点
#define av(y) setprecision(y) << fixed

int main()
{
    int item, n, i;        // 定义变量:item 为初始值,n 为迭代次数,i 为循环计数器
    double mid, sumN = 0;  // 定义变量:mid 用于存储当前值,sumN 用于存储累加和,初始化为 0

    // 从标准输入读取初始值 item 和迭代次数 n
    cin >> item >> n;

    // 将初始值 item 赋值给 mid,作为第一次迭代的起始值
    mid = item;

    // 循环 n 次,计算平方根序列的和
    for (i = 0; i < n; i++)
    {
        // 将当前 mid 的值累加到 sumN 中
        sumN += mid;

        // 更新 mid 为当前 mid 的平方根
        mid = sqrt(mid);
    }

    // 输出最终的累加和,保留两位小数
    cout << av(2) << sumN << endl;

    return 0;  // 程序正常结束
}

1052 : 前n项和

题目描述

 输入n和a,求a+aa+aaa+…aa…a(n个a),如当n=3,a=2时,2+22+222的结果为246 

输入

 包含两个整数,n和a,含义如上述,你可以假定n和a都是小于10的非负整数 

输出

 输出前n项和,单独占一行

样例输入

3 2

样例输出

246

注意:前n项和对应的变量,用整形

C++版

#include<iostream>       // 包含标准输入输出流库
using namespace std;     // 使用标准命名空间,避免重复书写 std::

int main()
{
    int a, n, i;          // 定义变量:a 为初始值,n 为迭代次数,i 为循环计数器
    int mid, sumN = 0;    // 定义变量:mid 用于存储当前值,sumN 用于存储累加和,初始化为 0

    // 从标准输入读取迭代次数 n 和初始值 a
    cin >> n >> a;

    // 将初始值 a 赋值给 mid,作为第一次迭代的起始值
    mid = a;

    // 循环 n 次,生成数列并计算和
    for (i = 0; i < n; i++)
    {
        // 将当前 mid 的值累加到 sumN 中
        sumN += mid;

        // 更新 mid 为当前 mid 的末尾追加一个 a
        mid = mid * 10 + a;
    }

    // 输出最终的累加和
    cout << sumN << endl;

    return 0;  // 程序正常结束
}

C语言版 

#include<stdio.h>  // 包含标准输入输出库

int main()
{
    int a, n, i;          // 定义变量:a 为初始值,n 为迭代次数,i 为循环计数器
    int mid, sumN = 0;    // 定义变量:mid 用于存储当前值,sumN 用于存储累加和,初始化为 0

    // 从标准输入读取迭代次数 n 和初始值 a
    scanf("%d%d", &n, &a);

    // 将初始值 a 赋值给 mid,作为第一次迭代的起始值
    mid = a;

    // 循环 n 次,生成数列并计算和
    for (i = 0; i < n; i++)
    {
        // 将当前 mid 的值累加到 sumN 中
        sumN += mid;

        // 更新 mid 为当前 mid 的末尾追加一个 a
        mid = mid * 10 + a;
    }

    // 输出最终的累加和
    printf("%d\n", sumN);

    return 0;  // 程序正常结束
}

1053 : 正弦函数

题目描述

输入x,计算上面公式的前10项和。

输入

输入一个实数x。(0<=x<=3)

输出

输出一个实数,即数列的前10项和,结果保留3位小数。

样例输入

1

样例输出

0.841

C语言版(递归+记忆化数组)代码没有问题,太高级了OJ上过不了,可借鉴思路

#include<stdio.h>
#include<math.h>
int mem[20]={0};
int factrial(int x)
{
	if(mem[x]) return mem[x];
	
	int mid=0;
	if( x == 1 || x==0)
	{
		return 1;
	}
	else
	{
		mid = x * factrial(x-1);
	}
	
	mem[x]=mid;
	return mid;
}
int main()
{
	double mid,sumN=0,x,i;
	scanf("%lf",&x);
	mid = x;
	for(i=1;i<=10;i++)
	{
		sumN += mid/factrial(2*i-1);
		mid = mid*x*x*(-1); 
	}
	
	printf("%.3f\n",sumN);
	return 0;
}

代码二(通过OJ)

#include<stdio.h>  // 包含标准输入输出库

int main()
{
    double mid1, sumN = 0, x, i;  // 定义变量:mid1 用于存储当前项的分子,sumN 用于存储级数和,x 为输入值,i 为循环计数器
    long long mid2;  // 定义变量:mid2 用于存储当前项的分母,使用 long long 类型以避免溢出

    scanf("%lf", &x);  // 从标准输入读取一个双精度浮点数 x

    mid1 = x;  // 将 x 赋值给 mid1
    mid2 = 1;  // 将 1 赋值给 mid2
    for (i = 1; i <= 10; i++)
    {
        sumN += mid1 / mid2;  // 计算级数的每一项并累加到 sumN 中
        mid1 = mid1 * x * x * (-1);  // 更新 mid1 为下一项的分子
        mid2 = mid2 * (2 * i) * (2 * i + 1);  // 更新 mid2 为下一项的分母
    }

    printf("%.3f\n", sumN);  // 输出最终的级数和,保留三位小数

    return 0;  // 程序正常结束
}

C++版

#include<iostream>       // 包含标准输入输出流库
#include<iomanip>        // 包含输入输出格式控制库,用于设置输出格式
using namespace std;     // 使用标准命名空间,避免重复书写 std::

// 定义一个宏 av(y),用于设置输出精度为 y 位小数,并固定小数点
#define av(y) setprecision(y) << fixed

int main()
{
    double mid1, sumN = 0, x, i;  // 定义变量:mid1 用于存储当前项的分子,sumN 用于存储级数和,x 为输入值,i 为循环计数器
    long long mid2;  // 定义变量:mid2 用于存储当前项的分母,使用 long long 类型以避免溢出

    cin >> x;  // 从标准输入读取一个双精度浮点数 x

    mid1 = x;  // 将 x 赋值给 mid1
    mid2 = 1;  // 将 1 赋值给 mid2
    for (i = 1; i <= 10; i++)
    {
        sumN += mid1 / mid2;  // 计算级数的每一项并累加到 sumN 中
        mid1 = mid1 * x * x * (-1);  // 更新 mid1 为下一项的分子
        mid2 = mid2 * (2 * i) * (2 * i + 1);  // 更新 mid2 为下一项的分母
    }

    cout << av(3) << sumN << endl;  // 输出最终的级数和,保留三位小数

    return 0;  // 程序正常结束
}

1054 : 猴子吃桃

题目描述

悟空第一天摘下桃子若干,当即吃掉一半,还不过瘾,又多吃一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?

输入

输入一个数n(1<=n<=30)。

输出

输出第一天的桃子个数。

样例输入

3

样例输出

10

 C语言版

#include<stdio.h>  // 包含标准输入输出库
#include<math.h>   // 包含数学函数库(虽然本代码中未使用数学函数库的功能)

int main()
{
    int n, mid = 1, i;  // 定义变量:n 为天数,mid 为当前桃子数量,i 为循环计数器
    scanf("%d", &n);    // 从标准输入读取一个整数 n

    // 从 2 开始循环到 n,共循环 n-1 次
    for (i = 2; i <= n; i++)
    {
        mid = (mid + 1) * 2;  // 每次将当前值 mid 加 1 后再乘以 2
    }

    printf("%d\n", mid);  // 输出最终的 mid 值
    return 0;             // 程序正常结束
}

C语言(递归)

#include<stdio.h>  // 包含标准输入输出库

// 定义递归函数 dfs,用于计算第 x 天的桃子数量
int dfs(int x)
{
    int sum = 0;  // 定义变量 sum 用于存储计算结果
    if (x == 1) return 1;  // 如果是第 1 天,返回 1(因为第 1 天只剩下一个桃子)
    else
    {
        // 递归计算前一天的桃子数量
        // 根据题目描述,第 x 天的桃子数量是第 x-1 天的桃子数量加 1 后再乘以 2
        sum = (dfs(x - 1) + 1) * 2;
    }
    return sum;  // 返回计算结果
}

int main()
{
    int n, mid, i;  // 定义变量:n 为天数,mid 为最终结果,i 为循环计数器(虽然本代码中未使用 i)
    scanf("%d", &n);  // 从标准输入读取一个整数 n

    mid = dfs(n);  // 调用递归函数 dfs 计算第 n 天的桃子数量
    printf("%d\n", mid);  // 输出最终的桃子数量
    return 0;  // 程序正常结束
}

C++版

#include<iostream>       // 包含标准输入输出流库
using namespace std;     // 使用标准命名空间,避免重复书写 std::

int main()
{
    int n, mid = 1, i;  // 定义变量:n 为输入的整数,mid 为1,第一天桃子数为一,i 为循环计数器
    cin >> n;           // 从标准输入读取一个整数 n

    // 从 2 开始循环到 n,共循环 n-1 次
    for (i = 2; i <= n; i++)
    {
        mid = (mid + 1) * 2;  // 每次将当前值 mid 加 1 后再乘以 2
    }

    printf("%d\n", mid);  // 输出最终的 mid 值,即第n天桃子的数
    return 0;             // 程序正常结束
}

1055 : 兔子繁殖问题

题目描述

这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。按此规律,假设没有兔子死亡,第一个月有一对刚出生的小兔子,问第n个月有多少对兔子?

输入

输入月数n(1<=n<=44)。

输出

输出第n个月有多少对兔子。

样例输入

3

样例输出

2

C语言版 (递归)

#include<stdio.h>
#include<math.h>

// 定义递归函数 dfs,用于计算第 n 个月的兔子对数
int dfs(int x)
{
    int sum = 0;  // 定义变量 sum 用于存储计算结果
    if (x == 1 || x == 2) return 1;  // 第 1 个月和第 2 个月都只有 1 对兔子
    else
    {
        // 递归计算第 n 个月的兔子对数
        // 根据斐波那契数列的定义,第 n 个月的兔子对数等于第 n-1 个月和第 n-2 个月的兔子对数之和
        sum = dfs(x - 1) + dfs(x - 2);
    }
    return sum;  // 返回计算结果
}

int main()
{
    int n, mid, i;  // 定义变量:n 为月份数,mid 为最终结果,i 为循环计数器(虽然本代码中未使用 i)
    scanf("%d", &n);  // 从标准输入读取一个整数 n,表示需要计算的月份

    mid = dfs(n);  // 调用递归函数 dfs 计算第 n 个月的兔子对数
    printf("%d\n", mid);  // 输出最终的结果
    return 0;  // 程序正常结束
}

(动态规划) 

#include<stdio.h>  // 包含标准输入输出库
int main()
{
    int n, mid, i;  // 定义变量:n 为月份数,mid 为中间变量(未使用),i 为循环计数器
    scanf("%d", &n);  // 从标准输入读取一个整数 n,表示需要计算的月份

    int f[n + 1];  // 定义一个数组 f,用于存储斐波那契数列的每一项,大小为 n+1
    f[1] = 1;      // 第 1 个月有 1 对兔子
    f[2] = 1;      // 第 2 个月也有 1 对兔子

    // 使用循环计算从第 3 个月到第 n 个月的兔子对数
    for (i = 3; i <= n; i++)
    {
        f[i] = f[i - 1] + f[i - 2];  // 第 i 个月的兔子对数等于第 i-1 个月和第 i-2 个月的兔子对数之和
    }

    printf("%d\n", f[n]);  // 输出第 n 个月的兔子对数
    return 0;  // 程序正常结束
}

C++版

动态规划

#include<iostream>       // 包含标准输入输出流库
using namespace std;     // 使用标准命名空间,避免重复书写 std::

int main()
{
    int n, i;  // 定义变量:n 为月份数,i 为循环计数器
    cin >> n;       // 从标准输入读取一个整数 n,表示需要计算的月份

    int f[n + 1];   // 定义一个数组 f,用于存储斐波那契数列的每一项,大小为 n+1
    f[1] = 1;       // 第 1 个月有 1 对兔子
    f[2] = 1;       // 第 2 个月也有 1 对兔子

    // 使用循环计算从第 3 个月到第 n 个月的兔子对数
    for (i = 3; i <= n; i++)
    {
        f[i] = f[i - 1] + f[i - 2];  // 第 i 个月的兔子对数等于第 i-1 个月和第 i-2 个月的兔子对数之和
    }

    cout << f[n] << endl;  // 输出第 n 个月的兔子对数
    return 0;              // 程序正常结束
}

递归

#include<iostream>       // 包含标准输入输出流库
using namespace std;     // 使用标准命名空间,避免重复书写 std::

// 定义递归函数 dfs,用于计算斐波那契数列的第 x 项
int dfs(int x)
{
    int sum = 0;  // 定义变量 sum 用于存储计算结果
    if (x == 1 || x == 2) return 1;  // 第 1 项和第 2 项都是 1
    else
    {
        // 递归计算第 x 项的值
        // 根据斐波那契数列的定义,第 x 项是第 x-1 项和第 x-2 项的和
        sum = dfs(x - 1) + dfs(x - 2);
    }
    return sum;  // 返回计算结果
}

int main()
{
    int n, i;  // 定义变量:n 为月份数,mid 为最终结果
    cin >> n;       // 从标准输入读取一个整数 n,表示需要计算的月份

    mid = dfs(n);  // 调用递归函数 dfs 计算第 n 个月的兔子对数
    cout << mid;   // 输出第 n 个月的兔子对数
    return 0;      // 程序正常结束
}

1056 : 整存零取

题目描述

假设银行一年整存零取的月息为x,现在某人手头有一笔钱,他打算在今后5年中,每年年底取出1000元作为孩子来年的教育金,到第5年孩子毕业时刚好取完这笔钱,请编程计算第1年年初时他应存入银行多少钱。

输入

输入一个实数x,表示月息。

输出

输出一个实数,小数点后保留两位小数,占一行。

样例输入

0.01875

样例输出

2833.29

http://www.kler.cn/a/532761.html

相关文章:

  • list容器(详解)
  • 自定义数据集 使用scikit-learn中SVM的包实现SVM分类
  • Spring Boot 2 快速教程:WebFlux处理流程(五)
  • 【C语言篇】“三子棋”
  • vscode软件操作界面UI布局@各个功能区域划分及其名称称呼
  • 贪吃蛇实现
  • linux 命令笔记
  • Linux(Centos)安装allnnlp失败,jsonnet报错
  • git进阶--4---git rebase 和 git merge的区别与联系
  • kubernetes 核心技术-Helm
  • MySQL 事务实现原理( 详解 )
  • 【web js逆向分析易盾滑块fp参数】逆向分析网易易盾滑块的 fp 参数,仅供学习交流
  • 渗透笔记2
  • 人工智能赋能企业系统架构设计:以ERP与CRM系统为例
  • 【零基础到精通】小白如何自学网络安全
  • 5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术
  • 【大数据技术】案例03:用户行为日志分析(python+hadoop+mapreduce+yarn+hive)
  • 【医学影像 AI】EyeMoSt+:用于眼科疾病筛查的置信度感知多模态学习框架
  • 分享从零开始学习网络设备配置--任务6.5 实现园区网安全接入互联网
  • 网工_CSMA/CD协议
  • 【C语言深入探索】:指针高级应用与极致技巧(二)
  • C/C++炫酷烟花②(完整代码)
  • 5 前端系统开发:Vue2、Vue3框架(中):Vue前端工程化组件式开发
  • 跨域问题和解决方案
  • 【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR
  • 基础笔记|splice()的用法