鹏哥C语言74---第12次作业:OJ题练习

发布于:2024-10-13 ⋅ 阅读:(20) ⋅ 点赞:(0)

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>

//---------------------------------------------------------------------------- 编程题 1:小乐乐走台阶
小乐乐上课需要走n阶台阶,因为她腿比较长,所以每次可以选择走1阶或者2阶,那么一共有多少种走法
输入 整数 1<=n<=30
输出 整数 走法数

// fib(10)=fib(9)+fib(8)
// =fib(8)+fib(7)  +  fib(7)+fib(6)
// =fib(7)+fib(6)  +  fib(6)+fib(5)  +    fib(6)+fib(5)  +  fib(5)+fib(4)

int fib(int n)
{
    if (n <= 2)
        return n;
    else
        return fib(n - 1) + fib(n - 2);
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    //计算(递归)
    int ret = fib(n); //调用函数
    //输出
    printf("%d\n", ret);

    return 0;
}

//-------------------------------------------------------------------------------- 编程题 2:序列中删除指定数字
有一个整数序列(可能有重复的整数), 现删除指定的某一个整数, 输出删除指定数字之后的序列, 序列中未被删除数字的前后位置没有发生改变。
数据范围 : 序列长度和序列中的值都满足1≤n≤50
输入描述 : 第一行输入一个整数(0≤N≤50)。
                第二行输入N个整数, 输入用空格分隔的N个整数。
                第三行输入想要进行删除的一个整数。
输出描述 :输出为一行, 删除指定数字之后的序列。
例如
输入:6
          1 2 3 4 5 9
          4
输出:1 2 3 5 9

int main()
{
    int n = 0;
    scanf("%d", &n);
    //接收n 个数字
    int arr[50] = { 0 }; //不超过50个
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    //要删除的值
    int dele = 0;
    scanf("%d", &dele);
    //删除
    int j = 0;
    for (i = 0; i < n; i++)
    {
        if (arr[i] != dele)
        {
            arr[j] = arr[i];
            j++;
        //arr[j++] = arr[i]; // j++ j先使用,后++,与上述两行代码意思一样
        }
    }
    
    //输出删除指定数字之后的序列
    for (i = 0; i < j; i++)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}

//--------------------------------------------------------------------- 编程题 3:最高分与最低分之差
输入n个成绩,换行输出最高分和最低分之差
输入两行 第一行 n 表示n个成绩,不大于10000
               第二行 n 个成绩 整数表示(0~100),以空格隔开
输出 一行,最高分与最低分之差//---------------------------------------------方法1

int main()
{
    int n = 0;
    scanf("%d", &n);
    //接收n 个数字
    int arr[10000] = { 0 }; //不超过50个
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    //找出最大值
    int max = arr[0];
    for (i = 1; i < n; i++)
    {
        if (arr[i] > max)
        {
            max = arr[i];
        }
    }
    //找出最小值
    int min = arr[0];
    for (i = 1; i < n; i++)
    {
        if (arr[i] < min)
        {
            min = arr[i];
        }
    }
    //输出
    printf("%d\n", max - min);

    return 0;
}

//---------------------------------------------方法2:优化

int main()
{
    int n = 0;
    scanf("%d", &n);
    int arr[10000] = { 0 }; 
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    int max = arr[0];
    int min = arr[0];
    for (i = 1; i < n; i++)
    {
        if (arr[i] > max)
            max = arr[i];
        if (arr[i] < min)
            min = arr[i];
    }
    printf("%d\n", max - min);

    return 0;
}

//---------------------------------------------方法3:优化plus

int main()
{
    int n = 0;
    scanf("%d", &n);
    int arr[10000] = { 0 };
    int i = 0;
    int max = 0;
    int min = 100;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
        if (arr[i] > max)
            max = arr[i];
        if (arr[i] < min)
            min = arr[i];
    }
    printf("%d\n", max - min);
    return 0;
}