当前位置: 首页 > news >正文

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

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

PAT (Basic Level) Practice 1096 大美数

问题分析

  • 题目要求过于明确, 只想到用穷举法。
  • 由于是检查4个正因数之和是否能被原整数整除,所以穷举需要写四重循环。
  • 由于因数组合的顺序不影响因数和, 即也不影响被原整数整除, 所以内层循环都以上一层循环的值+1作为初始值。

完整描述步骤

  1. 获取输入: 正整数个数, 各个正整数
  2. 对于每一个正整数:
    • 初始化标志位:
      • 找到了满足条件的组合标志位 = False
    • 设置四层循环, 对于每一层循环:
      • 先检查标志位是否为True, 如果为真直接break
      • 如果当前循环的数值不能被当前检查的正整数整除, 直接continue
    • 在第四层循环时才列举齐全需要检查的4个正因数组合, 第二层进行检查:
      • 如果正整数能够整除这4个正因数的和:
        • 找到了满足条件的组合标志位 = True
    • 如果 标志位 为 True:
      • 输出"Yes"
    • 否则:
      • 输出"No"

伪代码描述

  1. get input: case_amount
  2. for each case:
    • get input: number
    • init recorder:
      • is_met_conditions = False
    • for a in range(1, number):
      • if is_met_conditions: break;
      • if number % a != 0: continue;
      • for b in range(a+1, number):
        • if is_met_conditions: break;
        • if number % b != 0: continue;
        • for c in range(b+1, number):
          • if is_met_conditions: break;
          • if number % c != 0: continue;
          • for d in range(c+1, number):
            • if is_met_conditions: break;
            • if number % d != 0: continue;
            • if number % (a+b+c+d) == 0:
              • is_met_conditions = True
    • if is_met_conditions:
      • print(“Yes”)
    • else:
      • print(“No”)

完整提交代码

/*
# 问题分析
题目要求过于明确, 只想到用穷举法。
由于是检查4个正因数之和是否能被原整数整除,所以穷举需要写四重循环。
由于因数组合的顺序不影响因数和, 即也不影响被原整数整除, 所以内层循环都以上一层循环的值+1作为初始值。

# 完整描述步骤
1. 获取输入: 正整数个数, 各个正整数
2. 对于每一个正整数:
    - 初始化标志位:
        - 找到了满足条件的组合标志位 = False
    - 设置四层循环, 对于每一层循环:
        - 先检查标志位是否为True, 如果为真直接break
        - 如果当前循环的数值不能被当前检查的正整数整除, 直接continue
    - 在第四层循环时才列举齐全需要检查的4个正因数组合, 第二层进行检查:
        - 如果正整数能够整除这4个正因数的和:
            - 找到了满足条件的组合标志位 = True
    - 如果 标志位 为 True:
        - 输出"Yes"
    - 否则:
        - 输出"No"

# 伪代码描述
1. get input: case_amount
2. for each case:
    - get input: number
    - init recorder:
        - is_met_conditions = False
    - for a in range(1, number):
        - if is_met_conditions: break;
        - if number % a != 0: continue;
        - for b in range(a+1, number):
            - if is_met_conditions: break;
            - if number % b != 0: continue;
            - for c in range(b+1, number):
                - if is_met_conditions: break;
                - if number % c != 0: continue;
                - for d in range(c+1, number):
                    - if is_met_conditions: break;
                    - if number % d != 0: continue;
                    - if number % (a+b+c+d) == 0:
                        - is_met_conditions = True
    - if is_met_conditions:
        - print("Yes")
    - else:
        - print("No")

*/


# include<stdio.h>

int is_super_beautiful_number(int number){
    int flag = 0;
    for(int a = 1; a < number; a++){
        if (flag) break;
        if (number % a != 0) continue;
        for(int b = a+1; b < number; b++){
            if (flag) break;
            if (number % b != 0) continue;
            for(int c = b+1; c < number; c++){
                if (flag) break;
                if (number % c != 0) continue;
                for(int d = c+1; d <= number; d++){
                    if (flag) break;
                    if (number % d != 0) continue;
                    if ((a + b + c + d) % number == 0){
                        flag = 1;
                    }
                }
            }
        }
    }
    
    return flag;
}

int main(){
    int case_amount;
    scanf("%d", &case_amount);

    int number, flag;
    for (int i = 0; i < case_amount; i++){
        scanf("%d", &number);
        int is_met_conditions = is_super_beautiful_number(number);

        if (is_met_conditions){
            printf("Yes\n");
        } else {
            printf("No\n");
        }
    }
    
    return 0;
}

相关文章:

  • 使用Anaconda安装TensorFlow详细教程
  • wifi热点setting
  • stable diffuison论文阅读
  • 开源工具系列1:Cloud Custodian
  • Java 的三种技术架构
  • 智能表格软件-FineReport JS实现自定义按钮快速给参数赋指定范围值
  • CSDN第17次竞赛题解与总结
  • mybatis相关使用_lombok插件
  • 5G核心网UPF硬件加速技术
  • 服务之星网络评选视频投票小程序如何进行视频投票免费公众号投票
  • 解决原 Unique Key 模型存在的问题
  • Shell ❀ 正则表达式
  • xxe-lab靶场安装和简单php代码审计
  • Kibana:圣诞老人使用 Kibana Dashboards 驾驶他的雪橇!
  • 离线下载NLTK依赖包([WinError 10061] 由于目标计算机积极拒绝,无法连接)的解决方案
  • 基于matlab的MIMO-OFDM无线信道模型距离与路径损耗的仿真
  • 0.96寸OLED显示屏介绍续
  • 90后,27岁转行软件测试,从月入3000+到月薪过万,打开了人生新篇章~
  • 2022年安徽最新交安安全员考试模拟题及答案
  • C++【图】