C++从两个大小相同的不同整数数组中寻找最小商
C++ Finding the minimum quotient from two different integer arrays of the same size
我有两个不同的数组,分子[],分母[]和int大小为9。它们都由9个不同的整数组成,我需要找到2 int的最低商(百分比-(分子[])/(分母[]))。我该怎么做?
您想返回百分比还是商(不带余数)?以下代码返回百分比。如果您想要商,请将double改为int。
#include<limits>
double lowestQuotient(const int *numerator, const int *denominator)
{
double min=DBL_MAX;
double quotient;
for(i=0;i<9;i++)
{
if (denominator[i]==0)
continue;
quotient = (double)numerator [i]/denominator [i];
if (i==0 || quotient<min)
min=quotient;
}
return min;
}
编辑:这个答案是在问题陈述更改之前写的,目的是澄清我们的意图不是比较每个组合,而是只取成对的商。这大大简化了问题,使我在这里的冗长解决方案显得过于冗长。这也是在指出涉及浮点值的解决方案之前编写的;我假设提问者对两个整数的商的数学定义感兴趣,这本身就是一个整数。尽管如此,我还是要把这个留给后人
编辑2:修复了编译错误——感谢James Root指出错误
这首先是一道数学题,其次是一道编程题。
最简单的实现是计算第一个数组的分子除以第二个数组的分母的每个组合,跟踪最小商,然后计算结果。
这看起来像以下内容:
#include <climits>
#include <algorithm>
int minimum_quotient(int numerator[], int denominator[], int size)
{
int minimum = INT_MAX; // minimum quotient
for (int i = 0; i < size; ++i)
for (int j = 0; j < size; ++j)
if (denominator[j] != 0) // avoid division by 0
minimum = std::min(minimum, numerator[i] / denominator[j]);
return 0;
}
由于size
是一个已知的小数字,这应该足够了。然而,如果我们担心size
变得非常大的情况,我们可能希望避免上面写的解决方案,它与输入大小的平方成比例。
这里有一个解决方案的想法,它可以更好地扩展到更大的尺寸。具体来说,它与输入的大小成线性比例。我们可以利用以下事实:
如果分子和分母都有相同的符号,那么最小的商将来自绝对值最小的分子和绝对值最大的分母。
如果分子和分母的符号相反,则相反:对于最小的商,我们想要绝对值最大的分子和绝对值最小的分母。
我们可以对这两个列表进行一次迭代,累积最大和最小的分子和分母,然后在最后对它们进行比较,以找到最小的商:
#include <climits>
#include <algorithm>
int minimum_quotient(int numerator[], int denominator[], int size)
{
int min_num = INT_MAX, min_den = INT_MAX;
int max_num = INT_MIN, max_den = INT_MIN;
for (int i = 0; i < size; ++i)
{
min_num = std::min(min_num, numerator[i]);
max_num = std::max(max_num, numerator[i]);
min_den = std::min(min_den, denominator[i]);
max_den = std::max(max_den, denominator[i]);
}
int minimum = INT_MAX;
if (min_den != 0)
{
minimum = std::min(minimum, min_num / min_den);
minimum = std::min(minimum, max_num / min_den);
}
if (max_den != 0)
{
minimum = std::min(minimum, min_num / max_den);
minimum = std::min(minimum, max_num / max_den);
}
return minimum;
}
相关文章:
- c++类声明时,相同的例程,不同的成员变量类型
- 不同语言中相同代码的不同行为
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 我希望定义两个具有相同代码的不同名称的库
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 与其他编译器相比,相同的代码在工作室Microsoft提供不同的输出
- 类具有相同的接口,但参数的类型不同
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- 如何使用不同的谷歌模拟运行相同的谷歌测试用例?
- cpp 返回具有相同输入的不同输出
- 如何将整数分解为不同的变量?
- Opengl 3/4 : 我可以将相同的缓冲区对象绑定到不同的目标吗?
- C++奇怪的行为..相同的变量包含不同的值
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 移位运算符如何在查找两个整数中的不同位数?
- 标准库是否提供检查双精度值是否与整数相同的函数
- 如何使用相同的成员函数更改相同的不同元素
- 在"uint8_t | (uint8_t << 8)"中是否有处理整数提升的不同方式?
- C++从两个大小相同的不同整数数组中寻找最小商
- 在表达式 bool <<整数中,bool 是提升为 int,还是提升为与整数相同的类型?