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

题设要求统计学生们判断题得分, 这是一道统计题。 一如既往, 对统计题, 我们先考虑要统计的数据以及存储形式。 由于是判断题, 题目给出的输入(题目分值, 答案以及学生的作答)都是数值形式, 所以存储为数组是合适且符合直觉的方式。 输入次序作为题目序号, 比较相同序号的题目答案和学生作答是否一致即可判断学生是否正确作答

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

Table of Contents

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

PAT乙级BasicLevelPractice 1061

问题分析

题设要求统计学生们判断题得分, 这是一道统计题。 一如既往, 对统计题, 我们先考虑要统计的数据以及存储形式。

由于是判断题, 题目给出的输入(题目分值, 答案以及学生的作答)都是数值形式, 所以存储为数组是合适且符合直觉的方式。 输入次序作为题目序号, 比较相同序号的题目答案和学生作答是否一致即可判断学生是否正确作答

完整描述步骤

  1. 依次获取输入: 学生数量, 判断题数量, 每道题的分值以及正确答案, 每一个学生的作答
  2. 对于每一个学生的作答:
    • 按照作答次序检查对应次序的题目的正确答案是否与学生作答一致
      • 如果一致, 则该学生总得分加上该题分值
  3. 输出每一个学生的总得分

伪代码描述

  1. get input: student_amount, question_amount, score and correct answer of each question
  2. init students'score recorder:
    • student_score[student_amount] = {0}
  3. get input: students' answers
  4. for each student:
    • for each answer:
      • if answer == current_question.answer:
        • student_score[current_student] += current_question.score
  5. print score of each student

完整提交代码

/*
# 问题分析
题设要求统计学生们判断题得分, 这是一道统计题。
一如既往, 对统计题, 我们先考虑要统计的数据以及存储形式。
 
由于是判断题, 题目给出的输入(题目分值, 答案以及学生的作答)都是数值形式, 
所以存储为数组是合适且符合直觉的方式。
输入次序作为题目序号, 比较相同序号的题目答案和学生作答是否一致即可判断学生是否正确作答
 
# 完整描述步骤
1. 依次获取输入: 学生数量, 判断题数量, 每道题的分值以及正确答案, 每一个学生的作答
2. 对于每一个学生的作答:
    - 按照作答次序检查对应次序的题目的正确答案是否与学生作答一致
        - 如果一致, 则该学生总得分加上该题分值
3. 输出每一个学生的总得分
 
# 伪代码描述
1. get input: student_amount, question_amount, score and correct answer of each question
2. init students'score recorder:
    - student_score[student_amount] = {0}
3. get input: students' answers
4. for each student:
    - for each answer:
        - if answer == current_question.answer:
            - student_score[current_student] += current_question.score
5. print score of each student
*/
 
# include<stdio.h>
 
int main(){
    int student_amount, question_amount;
    scanf("%d %d", &student_amount, &question_amount);
    
    int question_scores[question_amount];
    for (int i = 0; i < question_amount; i++){
        scanf("%d", &question_scores[i]);
    }
    
    int question_answers[question_amount];
    for (int i = 0; i < question_amount; i++){
        scanf("%d", &question_answers[i]);
    }
    
    for (int i = 0; i < student_amount; i++){
        int student_score = 0;
        int student_answer;
        for (int j = 0; j < question_amount; j++){
            scanf("%d", &student_answer);
            student_score +=  student_answer == question_answers[j] ? question_scores[j] : 0;
        }
        printf("%d\n", student_score);
    }
    
    return 0;
}
「PAT乙级真题解析」Basic Level 1061 判断题 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果