「PAT乙级真题解析」Basic Level 1010 (问题分析+完整步骤+伪代码描述+提交通过代码)

[PAT练级笔记] 08 Basic Level 1010

#c语言#pat考试#算法#需求分析#数据结构

Table of Contents

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT乙级BasicLevelPractice 1010

问题分析

题设要求"实现一元多项式的求导", 这意味着"按照求导的规则/步骤"获得的输出就是题设要求的输出.

"求导"

求导的过程可以描述如下: 对于多项式的单个项而言, 这个项求导的步骤为:

  1. 系数乘以指数的积作为新的指数
  2. 指数-1

多项式的求导可以描述为:

  1. 对各个项求导
  2. 将各个项的求导结果相加

3x^4 - 5x^2 + 6x^1 - 2 -> 12x^3 - 10 + 6

根据求导的定义, 我们可以看到其过程是对各个"系数"和"指数"的加法和乘法. 只要我们能够将"系数"和"指数"存储, 并且对应的系数和指数进行上述的运算, 就可以算出导数.

系数: [3, -5, 6, -2] -> [34, -52, 61, -20] -> [12, -10, 6] 指数: [4, 2, 1, 0] -> [4-1, 2-1, 1-1, 0-1] -> [3, 1, 0]

将思路完整描述如下:

  1. 获取系数和指数数据
  2. 建立系数和指数之间的对应关系, 要能够知道哪个系数和哪个指数是属于同一个项的
  3. 执行项的求导"系数乘以指数; 指数减去一"
  4. 将各个项的求导结果相加作为多项式的求导结果

实现上需要补充的细节

  1. 题设上没有先传入一个整数表示非零项的个数, C语言如何处理这种输入个数不确定的输入?
  2. 边界情况: 输入的多项式是一个常数项, 则其导数为0, 这种情况需要输出"0 0"

完整提交代码

/*
问题分析:
题设要求"实现医院多项式的求导", 这意味着"按照求导的规则/步骤"获得的输出就是题设要求的输出.
 
"求导"
求导的过程可以描述如下:
对于多项式的单个项而言, 这个项求导的步骤为:
1. 系数乘以指数的积作为新的指数
2. 指数-1
 
 
多项式的求导可以描述为:
1. 对各个项求导
2. 将各个项的求导结果相加
 
3x^4 - 5x^2 + 6x^1 - 2 -> 12x^3 - 10 + 6
 
根据求导的定义, 我们可以看到其过程是对各个"系数"和"指数"的加法和乘法.
只要我们能够将"系数"和"指数"存储, 并且对应的系数和指数进行上述的运算, 就可以算出导数.
 
系数: [3, -5, 6, -2]  -> [3*4, -5*2, 6*1, -2*0] -> [12, -10, 6]
指数: [4,  2, 1,  0]  -> [4-1,  2-1, 1-1,  0-1] -> [3,    1, 0]
 
将思路完整描述如下:
1. 获取系数和指数数据
2. 建立系数和指数之间的对应关系, 要能够知道哪个系数和哪个指数是属于同一个项的
3. 执行项的求导"系数乘以指数; 指数减去一"
4. 将各个项的求导结果相加作为多项式的求导结果
 
【实现上需要补充的细节】
1. 题设上没有先传入一个整数表示非零项的个数, C语言如何处理这种输入个数不确定的输入?
1. 边界情况: 输入的多项式是一个常数项, 则其导数为0, 这种情况需要输出"0 0"
*/
 
#include <stdio.h>
 
int main()
{
    int coefficient[10000];
    int index[10000];
    int i = 0;
    while (scanf("%d %d", &coefficient[i], &index[i]) == 2)
    {
        i++;
    }
    int item_amount = i;
 
    for (int i = 0; i < item_amount; i++)
    {
        coefficient[i] = coefficient[i] * index[i];
        index[i]--;
        if (coefficient[i] != 0)
        {
            if (i != 0){
                printf(" ");
                
            }
            printf("%d %d", coefficient[i], index[i]);
        }
    }
    
    if (item_amount == 1 && coefficient[i] == 0 && index[i] == 0){
        printf("0 0");
    }
 
    return 0;
}