PTA-基础编程题目集(函数题)

简介: PTA-基础编程题目集(函数题)

6-1 简单输出整数

题目链接

1.png

void PrintN(int N)
{
    int i=0;
    for(i=1;i<=N;i++)
    {
        printf("%d\n",i);
    }
}

6-2 多项式求值(重点掌握)

题目链接

2.png

double f( int n, double a[], double x )
{
    double sum=0;
    double x0=1.0;
    int i=0;
    for(i=0;i<=n;i++)
    {
        if(a[i])
        {
            sum+=x0*a[i];
            x0*=x;
        }
    }
    return sum;
}

6-3 简单求和

题目链接

3.png

int Sum(int list[],int n)
{
    int sum=0;
    int i=0;
    for(i=0;i<n;i++)
    {
        sum+=list[i];
    }
    return sum;
}

6-4 求自定类型元素的平均

题目链接

4.png

ElementType Average( ElementType S[], int N )
{
    ElementType sum=0;
    ElementType ave=0;
    int i=0;
    for(i=0;i<N;i++)
    {
        sum+=S[i];
    }
    ave=sum/N;
    return ave;
}

6-5 求自定类型元素的最大值

题目链接

5.png

ElementType Max( ElementType S[], int N )
{
    ElementType max=S[0];
    int i=0;
    for(i=1;i<N;i++)
    {
        if(S[i]>max)
        {
            max=S[i];
        }
    }
    return max;
}

6-6 求单链表结点的阶乘和

后续补充


6-7 统计某类完全平方数(重点掌握)

题目链接

7.png

int IsTheNumber ( const int N )
{
    int m=(int)(sqrt)(N);
    int n=m*m;
    if(n==N)
    {
        int num[10]={0};
        int i=0;
        while(n)
        {
            for(i=0;i<=9;i++)
            {
                if(n%10==i)
                {
                    num[i]+=1;
                }
                if(num[i]==2)
                {
                    return 1;
                }
            }
            n/=10;
        }
    }
    return 0;
}

6-8 简单阶乘计算

题目链接

8.png

方法一(循环):

int Factorial( const int N )
{
    if(N<0)
    {
        return 0;
    }
    else if(N==0)
    {
        return 1;
    }
    int i=0;
    int ret=1;
    for(i=1;i<=N;i++)
    {
        ret*=i;
    }
    return ret;
}

方法二(递归):

int Factorial( const int N )
{
    if(N<0)
    {
        return 0;
    }
    else if(N==0)
    {
        return 1;
    }
    return N*Factorial(N-1);
}

6-9 统计个位数字

题目链接

9.png

方法一:(此方法是我自己写的,虽然有点混乱,但好在结果正确)

int Count_Digit ( const int N, const int D )
{
    if(N==0)
    {
        return 1;
    }
    int tmp1=N;
    if(tmp1<0)
    {
        tmp1=-tmp1;
    }
    int tmp2=tmp1;
    int tmp3=tmp1;
    int i=0;
    int k=0;//k表示为几位数
    while(tmp2)
    {
        k++;
        tmp2/=10;
    }
    int count=0;
    for(i=0;i<k;i++)
    {
        if(tmp3%10==D)
        {
            count++;
        }
        tmp3/=10;
    }
    return count;
}


6-10 阶乘计算升级版(重点掌握)

题目链接

10.png

void Print_Factorial(const int N)
{
    char a[3000];
    int alength = 1;
    a[0] = 1;
    if (N < 0)
    {
        printf("Invalid input");
        return;
    }
    int i = 2;
    for (i = 2; i <= N; i++)
    {
        int z = 0;
        int k = 0;
        for (k = 0; k < alength; k++)
        {
            int t = i * a[k] + z;
            a[k] = t % 10;
            z = t / 10;
        }
        while (z)
        {
            a[alength++] = z % 10;
            z /= 10;
        }
    }
    for (i = alength - 1; i >= 0; i--)
    {
        printf("%d", a[i]);
    }
}

6-11 求自定类型元素序列的中位数(重点掌握)

题目链接

11.png

ElementType Median(ElementType A[], int N)
{
    ElementType i = 0;
    for (i = 0; i < N - 1; i++)
    {
        int j = 0;
        for (j = 0; j < N - 1 - i; j++)
        {
            if (A[j] > A[j + 1])
            {
                ElementType tmp = 0;
                tmp = A[j];
                A[j] = A[j + 1];
                A[j + 1] = tmp;
            }
        }
    }
    ElementType ret = 0;
    if (N % 2 == 0)
    {
        return  ret = A[(N + 1) / 2];
    }
    else
    {
        return ret = A[(N + 1) / 2 - 1];
    } 
}//超时但结果正确

11.1.png

上述代码写的时候结果正确,但是很遗憾超时了😂不过骗点分还是没问题的,哈哈😄。

下面是我找到的另外一种做法:


ElementType Median(ElementType A[], int N)
{
    int k = 0;
    ElementType tmp = 0;
    int i = 0;
    for (i = N / 2; i > 0; i = i / 2)
    {
        int j = 0;
        for (j = i; j < N; j++)
        {
            tmp = A[j];//将找到的中位数放到中间变量中去
            for (k = j; k >= i; k = k - i)
            {
                if (tmp < A[k - i])
                {
                    A[k] = A[k - i];
                }
                else
                {
                    break;
                }
            }
            A[k] = tmp;
        }
    }
    return A[N / 2];
}


6-12 判断奇偶性

题目链接


12.png

int even( int n )
{
    if(n%2==0)
        return 1;
    return 0;
}

6-13 折半查找

后续补充


总结

6-2 多项式求值中多项式的表示方法

多项式求值中多项式即:

13.png

这里我想说的是x的i次方该如何表示,其中让我感到巧妙的是这一部分:x0*=x;。


ElementType和ElemType

Element Type:typedef int ElementType;定义Element Type为int类型

ElemType:#define ElemType int;定义ElemType为int类型

这两个的作用都是一样的,没有区别,只不过定义的方式不同而已:

对于**typedef int ElementType;是重命名

对于#define ElemType int;是宏定义**


由于笔者还没怎么接触到数据结构,所以有些更好的题解不能进行没有写到,后续再给大家补充,另外6-6和6-13也是类似情况,请谅解,我会尽力及时补充。蟹蟹各位。😀

目录
相关文章
|
C语言
C语言简单题目的优化合集(多种解法分享)
C语言简单题目的优化合集(多种解法分享)
84 0
|
3月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
4月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
105 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
7月前
|
C语言
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(二)
我们可以通过创建并定义符号常量NUMBER,来作为判断是否胜利的标准。如三子棋中,令NUMBER为3,则这八个方向中有任意一个方向达成3子连珠,则连珠的这个棋子所代表的玩家获胜。
84 1
|
7月前
|
算法 C语言 C++
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(一)
三子棋游戏设计的核心是对二维数组的把握和运用。
100 1
|
7月前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(下)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
43 1
|
7月前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(上)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
43 0
|
C语言
C语言经典题目之 汉诺塔问题
C语言经典题目之 汉诺塔问题
88 0
|
存储 人工智能 Serverless
基础编程题目集 函数题部分(上)
基础编程题目集 函数题部分
174 0