p1028 [noip2001 普及组] 数的计算
时间: 2023-04-24 07:05:46 浏览: 193
题目描述
给定一个正整数 n,求有多少个 k 满足 k^2 ≤ n。
输入格式
一个整数 n。
输出格式
一个整数,表示满足条件的 k 的个数。
输入样例
10
输出样例
3
算法1
(暴力枚举) $O(\sqrt{n})$
枚举从 1 到 $\sqrt{n}$ 的整数,统计满足条件的个数。
时间复杂度
参考文献
python3 代码
C++ 代码
算法2
(二分查找) $O(\log n)$
二分查找满足 k^2 ≤ n 的最大的 k 值,然后返回 k。
时间复杂度
参考文献
C++ 代码
相关问题
P1028 [NOIP2001 普及组] 数的计算C++
题目P1028是NOIP(全国青少年信息学奥林匹克联赛)2001年的普及组比赛题目,通常涉及基础算法和数据结构。这个题目可能是一个关于数的计算问题,例如计算一系列数字的操作,比如加法、乘法、最大值、最小值等。在C++中,解决这类问题可能需要使用循环、条件语句以及一些基本的数据类型,如整型。
例如,如果问题是求一组整数的平均值,你可以这样做:
```cpp
#include <iostream>
using namespace std;
double calculateAverage(int arr[], int size) {
double sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum / size;
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int arraySize = sizeof(numbers) / sizeof(numbers[0]);
double average = calculateAverage(numbers, arraySize);
cout << "The average of the numbers is: " << average << endl;
return 0;
}
```
在这个例子中,`calculateAverage`函数接收一个整数数组和它的大小,然后计算并返回平均值。
如果你能提供具体的题目描述或更详细的要求,我可以给出更精确的答案。
P1049 [NOIP2001 普及组] 装箱问题C语言
### NOIP2001 普及组 装箱问题 C语言 实现 解题思路
#### 一维背包问题转换
装箱问题可以视为一种特殊的动态规划问题,类似于一维背包问题。目标是在给定容量的情况下最大化装载物品的数量或价值,在此特定情况下是将一系列不同尺寸的物体放入固定大小的箱子中。
#### 数据结构设计
定义数组 `f[j]` 表示前若干件商品恰好填满体积为 j 的最小数量。对于每一个新加入的商品 i ,更新 f 数组中的值来反映新的最优解状态变化情况[^1]。
#### 动态转移方程构建
设当前处理到第i个物件,其占用空间为w[i],则有如下递推关系:
当j >= w[i]时,
\[ f[j]=min(f[j-w[i]]+1,f[j]) \]
其中 \(f[0]\) 初始化为0表示没有任何货物的状态下所需容器数目自然也为零;其他位置初始化成无穷大(INF),意味着这些状态下暂时无法达到有效配置方案.
```c
#include <stdio.h>
#define INF (int)(1e9)
const int maxv = 50 * 100 + 1;
int v, n;
int weight[30];
bool used[maxv];
void solve() {
fill(used, used + maxv, false);
for(int i = 0; i < n ; ++i){
for(int j = v - weight[i]; j >= 0; --j){
if(!used[j]){
used[j + weight[i]] = true;
}
}
}
}
int main(){
scanf("%d %d", &v, &n);
for(int i = 0; i < n; ++i){
scanf("%d", &weight[i]);
}
solve();
int cnt = 0;
for(int i = 0; i <= v; ++i){
if(used[i])
++cnt;
}
printf("%d\n", cnt);
}
```
上述代码实现了基于布尔型数组记录可行性的简化版本,实际比赛中可能更倾向于使用整数类型的dp表来进行更加精确的结果计算并返回最终所需的最少集装箱数量而非简单计数可填充的空间组合总数.
阅读全文
相关推荐
















