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

ZZNUOJ(C/C++)基础练习1041——1050(详解版)

1041 : 数列求和2

题目描述

输入一个整数n,输出数列1-1/3+1/5-……前n项的和。

输入

输入只有一个整数n。

输出

结果保留2为小数,单独占一行。

样例输入

3

样例输出

0.87

注意sum += 1相当于sum=sum+1

注意sum *= 1相当于sum=sum*1

C语言版

#include<stdio.h> // 包含标准输入输出库
#include<math.h> // 包含数学库(虽然在这个程序中没有用到数学库的功能)

int main() // 主函数
{
    int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
    double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
    scanf("%d", &n); // 从用户输入中读取一个整数,存储到变量n中

    // 计算数列和
    for (i = 1; i <= n; i++) // 从1到n循环
    {
        mid *= -1.0; // 交替符号
        sum += mid / (2 * i - 1); // 计算当前项并加到sum上
    }

    printf("%.2f\n", sum); // 输出数列和,保留两位小数
    return 0; // 程序正常结束
}

C++版 

#include<iostream> // 包含标准输入输出流库
#include<iomanip> // 包含输入输出流格式化库
using namespace std; // 使用标准命名空间std

int main() // 主函数
{
    int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
    double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
    cin >> n; // 从标准输入读取一个整数,存储到变量n中

    // 计算数列和
    for (i = 1; i <= n; i++) // 从1到n循环
    {
        mid *= -1.0; // 交替符号
        sum += mid / (2 * i - 1); // 计算当前项并加到sum上
    }

    cout << setprecision(2) << fixed << sum << endl; // 使用setprecision(2)和fixed设置小数精度为2位,并输出数列和
    return 0; // 程序正常结束
}

1042 : 数列求和3

题目描述

求1-2/3+3/5-4/7+5/9-6/11+...的前n项和,结果保留3位小数。

输入

输入正整数n(n>0)。

输出

输出一个实数,保留3位小数,单独占一行。

样例输入

5

样例输出

0.917

C语言版

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

int main() // 主函数
{
    int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
    double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
    scanf("%d", &n); // 从用户输入中读取一个整数,存储到变量n中

    // 计算数列和
    for (i = 1; i <= n; i++) // 从1到n循环
    {
        mid *= -1.0; // 交替符号
        sum += mid * i / (2 * i - 1); // 计算当前项并加到sum上
    }

    printf("%.3f\n", sum); // 输出数列和,保留三位小数
    return 0; // 程序正常结束
}

C++版 

#include<iostream> // 包含标准输入输出流库
#include<iomanip> // 包含输入输出流格式化库
using namespace std; // 使用标准命名空间std

int main() // 主函数
{
    int n, i; // 定义两个整型变量n和i,用于存储用户输入的项数和循环计数
    double sum = 0, mid = -1; // 定义两个双精度浮点型变量sum和mid,分别用于存储数列和和交替符号的项
    cin >> n; // 从标准输入读取一个整数,存储到变量n中

    // 计算数列和
    for (i = 1; i <= n; i++) // 从1到n循环
    {
        mid *= -1.0; // 交替符号
        sum += mid * i / (2 * i - 1); // 计算当前项并加到sum上
    }

    cout << setprecision(3) << fixed << sum << endl; // 使用setprecision(3)和fixed设置小数精度为3位,并输出数列和
    return 0; // 程序正常结束
}

 

1043 : 最大值

题目描述

输入一个整数n和n个整数,输出这n个整数的最大值。

输入

输入有两行:第一行是一个正整数n,第二行是n个整数。

输出

输出包含一个整数,即n个数中的最大值,单独占一行。

样例输入

4
3 7 5 6

样例输出

7

注意设立变长数组,必须在输入n之后 

法一

C语言版

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

int main() {
    int n, i;  // 定义变量n用于存储数组大小,i用于循环控制
    scanf("%d", &n);  // 从输入中读取数组的大小n

    int arr[n];  // 定义一个动态数组,大小由用户输入决定

    // 从用户输入中读取数组的每个元素
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);  // 逐个读取输入的整数,存储到数组arr中
    }

    // 初始化最大值变量为数组的第一个元素
    int max = arr[0];  

    // 遍历数组,寻找最大值
    for (i = 1; i < n; i++) {
        if (arr[i] > max) {  // 如果当前元素大于当前最大值
            max = arr[i];    // 更新最大值
        }
    }

    // 输出最大值
    printf("%d\n", max);

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

C++版

#include<iostream>  // 包含C++标准输入输出流库
using namespace std; // 使用标准命名空间

int main() {
    int n, i;  // 定义变量n用于存储数组大小,i用于循环控制
    cin >> n;  // 从标准输入读取数组的大小n

    int arr[n];  // 定义一个变长数组,大小由输入决定

    // 从用户输入中读取数组的每个元素
    for (i = 0; i < n; i++) {
       cin>>arr[i];  // 使用cin逐个读取输入的整数,存储到数组arr中
    }

    // 初始化最大值变量为数组的第一个元素
    int max = arr[0];

    // 遍历数组,寻找最大值
    for (i = 1; i < n; i++) {
        if (arr[i] > max) {  // 如果当前元素大于当前最大值
            max = arr[i];    // 更新最大值
        }
    }

    // 输出最大值
    cout << max << endl;

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

法二(与法一没太大区别)

C语言版 

#include<stdio.h>  // 包含标准输入输出头文件

int main() {
    int n, i, max;  // 定义变量:n表示数组大小,i用于循环控制,max用于存储最大值

    // 读取数组大小n和数组的第一个元素(初始化最大值)
    scanf("%d%d", &n, &max);  

    int arr[n];  // 定义一个动态数组,大小由用户输入决定

    // 从数组的第二个元素开始读取(因为第一个元素已经读取并赋值给max)
    for (i = 1; i < n; i++) {
        scanf("%d", &arr[i]);  // 读取数组的第i个元素
        if (arr[i] > max) {    // 如果当前元素大于当前最大值
            max = arr[i];      // 更新最大值
        }
    }

    // 输出最大值
    printf("%d\n", max);

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

C++版 

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

int main() {
    int n, i, max;  // 定义变量:n表示数组大小,i用于循环控制,max用于存储最大值

    // 从标准输入读取数组的大小n和数组的第一个元素(初始化最大值)
    cin >> n >> max;

    int arr[n];  // 定义一个动态数组,大小由由输入决定(C++中不推荐使用VLA,但这里为了与C语言兼容)

    // 从数组的第二个元素开始读取(因为第一个元素已经读取并赋值给max)
    for (i = 1; i < n; i++) {
        cin >> arr[i];  // 读取数组的第i个元素
        if (arr[i] > max) {  // 如果当前元素大于当前最大值
            max = arr[i];    // 更新最大值
        }
    }

    // 输出最大值
    cout << max << endl;

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

法三 (排序思想)

C语言版

#include<stdio.h>  // 包含标准输入输出头文件

int main() {
    int n, i;  // 定义变量:n表示数组大小,i用于循环控制

    // 从输入中读取数组的大小n
    scanf("%d", &n);

    int arr[n];  // 定义一个变长数组(VLA),大小由输入决定

    // 从输入中读取数组的每个元素
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]);  // 逐个读取输入的整数,存储到数组arr中
    }

    // 使用冒泡排序的思想,将数列最大值转移到最后一个元素
    for (i = 0; i < n-1; i++) {
        if (arr[i] > arr[i+1]) {  // 如果当前元素大于下一个元素
            int mid = arr[i];     // 交换两个元素的位置
            arr[i] = arr[i+1];
            arr[i+1] = mid;
        }
    }

    // 输出最大值(位于数组的最后一个位置)
    printf("%d\n", arr[n-1]);

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

C++版(可使用容器vector替换数组)

#include<iostream>  // 包含C++标准输入输出流库
using namespace std;

int main() {
    int n, i;  // 定义变量:n表示数组大小,i用于循环控制

    // 从标准输入读取数组的大小n
    cin >> n;

    int arr[n];  // 定义一个变长数组,大小由输入决定

    // 从标准输入读取数组的每个元素
    for (i = 0; i < n; i++) {
        cin >> arr[i];  // 逐个读取输入的整数,存储到数组arr中
    }

    // 使用冒泡排序的思想,将数列最大值转移到最后一个元素
    for (i = 0; i < n - 1; i++) {
        if (arr[i] > arr[i + 1]) {  // 如果当前元素大于下一个元素
            int mid = arr[i];       // 交换两个元素的位置
            arr[i] = arr[i + 1];
            arr[i + 1] = mid;
        }
    }

    // 输出最大值(位于数组的最后一个位置)
    cout << arr[n - 1] << endl;

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

法四(使用C++的nth_element函数)

了解nth_element函数:nth_element函数——C++快速选择函数-CSDN博客

#include<iostream>  // 包含标准输入输出流库
#include<algorithm> // 包含算法库,用于使用 nth_element
using namespace std; // 使用标准命名空间

int main()
{
    int n, i; // 定义变量 n 和 i,分别用于存储数组大小和循环索引
    cin >> n; // 输入数组的大小
    int arr[n]; // 定义一个动态数组,存储 n 个整数(C++11之前 不推荐这样定义动态数组)

    for(i = 0; i < n; i++) // 循环输入数组的每个元素
    {
        cin >> arr[i]; // 输入数组元素
    } 

    nth_element(arr, arr + n - 1, arr + n); // 调用 nth_element,将第 n 小的元素(即最大值)放到第n个位置(对应下标为n-1)

    cout << arr[n - 1] << endl; // 输出第 n 小的元素(即数组中的最大值)
  
    return 0; // 程序结束
}

下面这个代码逻辑运算是对的,但在oj上过不了 

#include<iostream>  // 包含标准输入输出流库
#include<algorithm> // 包含算法库,用于使用 nth_element
using namespace std; // 使用标准命名空间

int main()
{
    int n, i; // 定义变量 n 和 i,分别用于存储数组大小和循环索引
    cin >> n; // 输入数组的大小
    vector<int> arr(n); // 使用 vector 定义动态数组,存储 n 个整数

    for(i = 0; i < n; i++) // 循环输入数组的每个元素
    {
        cin >> arr[i]; // 输入数组元素
    } 

    nth_element(arr.begin(), arr.begin() + n - 1, arr.end()); // 调用 nth_element
    // 这里的目的是找到数组中第 n 小的元素(即数组中的最大值)
    // nth_element 会将第 n 小的元素放到 arr[n-1] 的位置上
    // 并且保证 arr[n-1] 之前的元素都不大于 arr[n-1]

    cout << arr[n - 1] << endl; // 输出第 n 小的元素(即数组中的最大值)
    return 0; // 程序结束
}

法五(使用C++的max_element函数,涉及到数组指针) 

max_element 函数会返回指向数组中最大元素的指针,然后通过解引用指针 *a 来输出最大值。了解max_element函数:简要介绍C++中的 max 和 min 函数以及返回值-CSDN博客

#include<iostream>  // 包含标准输入输出流库
#include<algorithm> // 包含算法库,用于使用 max_element
using namespace std; // 使用标准命名空间

int main()
{
    int n, i; // 定义变量 n 和 i,分别用于存储数组大小和循环索引
    cin >> n; // 输入数组的大小
    int arr[n]; // 定义一个动态数组,存储 n 个整数

    for(i = 0; i < n; i++) // 循环输入数组的每个元素
    {
        cin >> arr[i]; // 输入数组元素
    } 

    int* a = max_element(arr, arr + n); // 使用 max_element 找到数组中的最大值
    // max_element 返回指向数组中最大元素的指针

    cout << (*a) << endl; // 输出最大值
    return 0; // 程序结束
}


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

相关文章:

  • Flutter Candies 一桶天下
  • LeetCode:343. 整数拆分
  • 解读 DeepSeek 关键 RL 算法 GRPO
  • Python练习(3)
  • Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成
  • C#,入门教程(13)——字符(char)及字符串(string)的基础知识
  • 17.3.4 颜色矩阵
  • 【C语言指针】指针和函数
  • litemall,又一个小商场系统
  • 9.[前端开发-CSS]Day09-CSS元素的定位和浮动
  • Prometheus 中的 Exporter
  • JavaScript系列(52)--编译优化技术详解
  • Qwen 模型自动构建知识图谱,生成病例 + 评价指标优化策略
  • Banana JS,一个严格子集 JavaScript 的解释器
  • Java小白入门教程:数组(多维数组)
  • 【AI绘画】MidJourney关键词{Prompt}全面整理
  • Java 中线程的使用
  • 独立游戏RPG回顾:高成本
  • hive为什么建表,表存储什么
  • neo4j-community-5.26.0 create new database
  • Kafka SSL(TLS)安全协议
  • LeetCode:322.零钱兑换
  • el-table组件样式如何二次修改?
  • 【Linux】CentOS8虚拟机的基本环境配置
  • python中的if判读
  • C语言基础5