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

如题目所示, 这道题的任务就是我们日常的输入密码, 检查密码是否等于正确密码的模拟题. 所以重点在于明确题目的要求, 然后准确地翻译成程序语言. 题目要求: - 最多只可以尝试指定次数 - 读到单个字符"#"时需要结束尝试 - 保证至少尝试一次 - 如果密码正确, 则输出"Welcome in"然后结束程序 - 如果密码错误, 则输出"Wrong password: 用户输入的错误密码" - 如果达到最大尝试次数还是没有输入正确密码, 则输出"Account locked"然后结束程序

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

Table of Contents

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

PAT乙级BasicLevelPractice 1067 试密码

问题分析

如题目所示, 这道题的任务就是我们日常的输入密码, 检查密码是否等于正确密码的模拟题. 所以重点在于明确题目的要求, 然后准确地翻译成程序语言. 题目要求:

  • 最多只可以尝试指定次数
  • 读到单个字符"#"时需要结束尝试
  • 保证至少尝试一次
  • 如果密码正确, 则输出"Welcome in"然后结束程序
  • 如果密码错误, 则输出"Wrong password: 用户输入的错误密码"
  • 如果达到最大尝试次数还是没有输入正确密码, 则输出"Account locked"然后结束程序

完整描述描述步骤

  1. 获取输入: 正确密码, 最大尝试次数
  2. 在最大尝试次数之内, 尝试读取用户用户输入:
    • 如果读到"#", 则结束程序;
    • 如果读到的密码等于正确密码:
      • 输出"Welcome in"
      • 结束程序
    • 如果读到的密码不等于正确密码:
      • 输出"Wrong password: 用户输入的错误密码"
  3. 最大尝试次数使用完毕, 输出"Account locked", 结束程序

伪代码描述

  1. get input: password, max_try_amount
  2. for (int i = 0; i < max_try_amount; i++):
    • get input: user_input
    • if user_input == "#":
      • end procedure.
    • else if user_input == password:
      • print("Welcome in");
      • end procedure.
    • else:
      • print("Wrong password: " + user_input);
  3. print("Account locked");

注意事项:

  1. 用户有可能没有尝试到最大允许次数就输入"#"退出输入
  2. 用户输入有可能包含空格

完整提交代码

/*
# 问题分析
如题目所示, 这道题的任务就是我们日常的输入密码, 检查密码是否等于正确密码的模拟题.
所以重点在于明确题目的要求, 然后准确地翻译成程序语言.
题目要求:
- 最多只可以尝试指定次数
- 读到单个字符"#"时需要结束尝试
- 保证至少尝试一次
- 如果密码正确, 则输出"Welcome in"然后结束程序
- 如果密码错误, 则输出"Wrong password: 用户输入的错误密码"
- 如果达到最大尝试次数还是没有输入正确密码, 则输出"Account locked"然后结束程序
 
# 完整描述描述步骤
1. 获取输入: 正确密码, 最大尝试次数
2. 在最大尝试次数之内, 尝试读取用户用户输入:
    - 如果读到"#", 则结束程序;
    - 如果读到的密码等于正确密码:
        - 输出"Welcome in"
        - 结束程序
    - 如果读到的密码不等于正确密码:
        - 输出"Wrong password: 用户输入的错误密码"
3. 最大尝试次数使用完毕, 输出"Account locked", 结束程序
 
# 伪代码描述
1. get input: password, max_try_amount
2. for (int i = 0; i < max_try_amount; i++):
    - get input: user_input
    - if user_input == "#":
        - end procedure.
    - else if user_input == password:
        - print("Welcome in");
        - end procedure.
    - else:
        - print("Wrong password: " + user_input);
3. print("Account locked");
 
# 注意事项:
1. 用户有可能没有尝试到最大允许次数就输入"#"退出输入
2. 用户输入有可能包含空格
*/
 
 
# include<stdio.h>
# include<string.h>
 
int main(){
    char password[21];
    int max_try_amount;
    scanf("%s %d", password, &max_try_amount);
 
    char user_input[100];
    getchar();
    for (int i = 0; i < max_try_amount; i++){
        fgets(user_input, 100, stdin);
        user_input[strlen(user_input) - 1] = 0;
        if (strcmp(user_input, "#") == 0){
            return 0;
        }
 
        if (strcmp(user_input, password) == 0){
            printf("Welcome in\n");
            return 0;
        }
 
        printf("Wrong password: %s\n", user_input);
    }
 
    printf("Account locked\n");
    return 0;
}
「PAT乙级真题解析」Basic Level 1067 试密码 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果