- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现走狗排序。
void stoogeSort(int arr[], int low, int high)
{
int size = high - low + 1;
if (size == 2 && arr[0] > arr[1])
{
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
else if (size > 2)
{
int mid = (int) ceil((2 * size) / 3);
stoogeSort(arr, low, mid - 1);
stoogeSort(arr, size - mid, high);
stoogeSort(arr, low, mid - 1);
}
}
int mid = (int) ceil((2 * size) / 3)
似乎有问题因为它没有返回正确的数字。例如,如果 size 计算为 4,则 mid 应为 3,因为 (2 * 4)/3 的上限为 3。但是,它为 2。
我有#include <cmath>
和 using std::ceil
在那之下。无论我进行何种类型转换,它要么持有错误的数字,要么最终在该函数的顶部抛出堆栈溢出错误。有任何想法吗?谢谢!
注意:将 3 更改为 3.0 会导致函数顶部发生堆栈溢出错误
最佳答案
int mid = (int) ceil((2 * size) / 3);
您正在进行整数除法并将结果传递给 ceil()
。因此,ceil()
调用无效。
尝试这样的事情:
int mid = ((2 * size) + 2) / 3;
但这并不能解决您真正的问题。你的算法有几个错误。继续执行 Wikipedia这部分:
if (size == 2 && arr[0] > arr[1])
{
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
应该是这样的:
if (arr[low] > arr[high])
{
std::swap(arr[low], arr[high]);
}
这部分:
else if (size > 2)
应该是:
if (size > 2)
这个:
int mid = (int) ceil((2 * size) / 3);
应该是:
int mid = size / 3;
还有这个:
stoogeSort(arr, low, mid - 1);
stoogeSort(arr, size - mid, high);
stoogeSort(arr, low, mid - 1);
应该是:
stoogeSort(arr, low, high - mid);
stoogeSort(arr, low + mid, high);
stoogeSort(arr, low, high - mid);
您应该注意 mid
不是中间元素的索引。它是您添加到 low
或从 high
中减去的大小。它可能小于 low
。因此,名称 mid
具有误导性。
将它们拼接在一起你会得到这个:
void stoogeSort(int arr[], int low, int high)
{
if (arr[low] > arr[high])
{
std::swap(arr[low], arr[high]);
}
int size = high - low + 1;
if (size > 2)
{
int mid = size / 3;
stoogeSort(arr, low, high - mid);
stoogeSort(arr, low + mid, high);
stoogeSort(arr, low, high - mid);
}
}
关于c++ ceil() in stooge sort 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765222/
我尝试运行以下代码,该代码位于 Bash 脚本内。 NUMBER=600 LOSS_RATE=0,3 TOT_PKT=100 test=$(python -c "from math import ce
为了使其更通用......我通过这样做更改了 Javascript 中 Number 对象的原型(prototype) Number.prototype.ceil = function() { ret
我需要委托(delegate)“ceil”函数。我的类有方法'ceil',它需要返回cpp 的本地方法'ceil'。怎么调用它? double ceil() { return ceil(); } -这
我运行了一个程序来找出 n + 1 和 2**ceil(log2(n+1)) 之间的区别,其中 n 是 2 的幂。一直呈指数增长 所以根据 Big - O 的定义,不存在满足 - 的常量 c' 2^(
这个问题在这里已经有了答案: Why does the order of '-l' option in gcc matter? [duplicate] (3 个答案) 关闭 3 年前。 我正在尝试在
这个问题在这里已经有了答案: Is floating point math broken? (31 个答案) PHP - Floating Number Precision [duplicate]
所以我刚从一个我做得很好的学校项目中拿回了我的成绩,但是因为我没有调用 ceil(...),评分者扣了 5 分。这是一门使用 CUDA 的并行计算类(class),但问题与任何 CUDA 功能没有直接
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我目前有这样的功能,可以将任何输入数字四舍五入到最接近的模糊整数值: $(function(){ $('#my_value').blur(function() { $(this).va
#include using namespace std; int main() { long long n,m; double ans; cin>>n>>m; an
为什么输出0而不是1? System.out.println((int) (Math.ceil(1/2))); 虽然这个正确输出 1 System.out.println((int) (Math.ce
#include #include int main() { long X; std::cin >> X; long f = ceil(X); std::cout > X 行在 ceil 看到值之前截
我对 matlab 中的 ceil 函数有疑问。当我说“ceil(192.00)”时,它应该返回 192。但是,当我声明一个变量 x 并将其赋值为 14*(256/20)+(256/20) 时,正好是
谁能解释一下? echo ceil( 20.7 * 100 ); // returns 2070 echo ceil( 2070 ); // returns 2070 一切正常,合乎逻辑,
在 VC++ 2008 中,ceil(-0.5) 返回 -0.0。这是通常/预期的行为吗?避免将 -0.0 打印到 i/o 流的最佳做法是什么。 最佳答案 C++中的 ceil来自C标准库。 C 标准
今天早上我丢失了一堆文件,但因为它们是一个卷,在内部和外部都进行了碎片整理,所以 100% 恢复所需的所有信息都可用;我只需要在需要的地方填写 FAT。 我编写了一个程序来执行此操作,并在我转储到文件
当四舍五入到 2 个小数位时,值 4.01132141 将四舍五入为 4.02,因为它超过了 4.01。 你怎么能在 PL/SQL 中做到这一点? 最佳答案 一种方法是做 ceil(value*100
我创建了一个函数来返回两个日期之间的差异 dateDiff($v[17], date('Y/m/d')); if ($days dateDiff('10 oct 2011',date('Y/m/d')
通常我会询问工作方面的问题,所以这里有一些不同的内容。为了以尽可能最 Nerd 的方式实现我的新年决心,我正在 Excel 文件中创建一个健身计划。我会做斜坡组,这意味着每组我都会增加 10% 的重量
是否可以对时间格式变量(例如 09:31:23)使用命令 ceil?我想使用 ceil 来获得 09:32:00。我尝试使用类似于 round(time,'0:01:00'T) 的东西,但我想使用 c
我是一名优秀的程序员,十分优秀!