「PAT乙级真题解析」Basic Level 1087 有多少不同的值 (问题分析+完整步骤+伪代码描述+提交通过代码)
- 题设要求给定一个正整数N,然后给定一个公式, 要求从1到正整数N分别代入到公式中得到的结果中, 可以得到哪些值的集合。 这题目的要求……也太简单明确了吧…… - 可以用数据模型集合来存储结果. C语言中没有集合, 可以使用数组存储结果, 索引对应结果, 索引位置的值对应出现的次数.
#算法#c语言#数据结构#需求分析#pat考试
Table of Contents
乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。
PAT (Basic Level) Practice 1087 有多少不同的值
问题分析
- 题设要求给定一个正整数N,然后给定一个公式, 要求从1到正整数N分别代入到公式中得到的结果中, 可以得到哪些值的集合。 这题目的要求……也太简单明确了吧……
- 可以用数据模型集合来存储结果. C语言中没有集合, 可以使用数组存储结果, 索引对应结果, 索引位置的值对应出现的次数.
完整描述步骤
- 获取输入: 正整数
- 初始化统计器:
- 结果集合 = {}
- 对于正整数从1到N:
- 计算结果
- 将结果加入结果集合
- 输出结果集合的长度
伪代码描述
- get input: positive number N
- init counter:
- frequency = {0}
- different_result_amount = 0;
- for number in range(1, N+1):
- calculate result = math.round(n/2) + math.round(n/3) + math.round(n/5)
- frequency[result]++;
- if frequency[result] == 1:
- different_result_amount++;
- print(different_result_amount)
完整提交代码
/*
# 问题分析
题设要求给定一个正整数N,然后给定一个公式, 要求从1到正整数N分别代入到公式中得到的结果中, 可以得到哪些值的集合。
这题目的要求……也太简单明了了吧。
可以用数据模型集合来存储结果. C语言中没有集合, 可以使用数组存储结果, 索引对应结果, 索引位置的值对应出现的次数.
# 完整描述步骤
1. 获取输入: 正整数
2. 初始化统计器:
- 结果集合 = {}
3. 对于正整数从1到N:
- 计算结果
- 将结果加入结果集合
4. 输出结果集合的长度
# 伪代码描述
1. get input: positive number N
2. init counter:
- frequency = {0}
- different_result_amount = 0;
3. for number in range(1, N+1):
- calculate result = math.round(n/2) + math.round(n/3) + math.round(n/5)
- frequency[result]++;
- if frequency[result] == 1:
- different_result_amount++;
4. print(different_result_amount)
*/
# include<stdio.h>
int frequency[30000] = {0};
int main(){
int number;
scanf("%d", &number);
int different_result_amount = 0;
int result;
for (int i = 1; i <= number; i++){
result = i / 2 + i / 3 + i / 5;
frequency[result]++;
if (frequency[result] == 1){
different_result_amount++;
}
}
printf("%d", different_result_amount);
return 0;
}