数字之间的比较
Comparisons between numbers
假设我有一个包含以下内容的文件:
6
8
9
12
15
20
我正在将第一个数字与其他数字进行比较,然后将第二个数字与它下面的所有数字进行比较,依此类推。
例如,对于每次比较,我都在查看两个数字是否相隔不到 10。然后我打印所有符合此条件的数字。
在这一点上,我应该有这样的东西:
6 8
6 9
6 12
6 15
8 9
8 12
8 15
9 12
9 15
12 15
12 20
15 20
但最后,我想要的是取符合条件的最小值和最大值,并删除其余值。所以我应该有:
6 15
因为这两个数字是符合条件的列表的最小值和最大值(相差小于 10(。
然后在列表中只剩下 20 个。 6、8、9、12 和 15 从列表中删除。 我试图做这样的事情,但它看起来并不好:
for(int i=0;i<6;i++)
{
for(int j=i+1;j<6;j++)
{
if((std::abs(number[j]-number[i])<=10))
{
if(number[j]<=number[j+1])
{
number[j]=number[j+1];
}
}
}
}
此外,该列表总共可能包含 10.000 个值。
知道如何做对吗?
随着你的进步,保持最好的答案怎么样。
int ans_a,ans_b,maxDiffSoFar = 0;
//...
int tempDiff = std::abs(number[j]-number[i]);
if(tempDiff <= 10 && tempDiff > maxDiffSoFar)
{
maxDifSoFar = tempDiff;
ans_a = number[i];
ans_b = number[j];
}
编辑: 澄清后,
int ans_a=INT_MAX,ans_b;
//...
int tempDiff = std::abs(number[j]-number[i]);
if(tempDiff <= 10 && (ans_a > number[i] || (ans_a == number[i] && ans_b < number[j]) ))
{
ans_a = number[i];
ans_b = number[j];
}
可能是以下代码将帮助您解决问题。我希望我正确理解你的问题,你去吧。
#include<iostream>
#include<cmath>
int main()
{
int arr[] = {6, 8, 9, 12, 15, 20, 22, 45, 99, 205};
std::cout << "All possible combinations:" << std::endl;
for(int i = 0; i < (sizeof(arr)/sizeof(*arr)) - 1; i++)
for( int j = i + 1; j < (sizeof(arr)/sizeof(*arr)); j++)
std::cout << arr[i] << " " << arr[j] << std::endl;
std::cout << std::endl << "Combinations respecting the condition:" << std::endl;
for(int i = 0; i < (sizeof(arr)/sizeof(*arr)) - 1; i++)
for( int j = i + 1; j < (sizeof(arr)/sizeof(*arr)); j++)
if(std::abs( arr[i] - arr[j]) < 10)
std::cout << arr[i] << " " << arr[j] << std::endl;
std::cout << std::endl << "Combination of mimum and maximum value respecting the condition:" << std::endl;
int max_difference = 0, max_index = 0, min_index = 0;
for(int i = 0; i < (sizeof(arr)/sizeof(*arr)) - 1; i++)
for( int j = i + 1; j < (sizeof(arr)/sizeof(*arr)); j++)
if( (std::abs( arr[i] - arr[j]) > max_difference) && (std::abs( arr[i] - arr[j]) < 10) )
{
max_difference = std::abs( arr[i] - arr[j]);
if(arr[i] > arr[j])
{
max_index = i;
min_index = j;
}
else
{
max_index = j;
min_index = i;
}
}
std::cout << arr[min_index] << " " << arr[max_index] << std::endl;
std::cout << std::endl << "The last combinations respect the condition, but beyond the minimu and maximum range:" << std::endl;
for(int i = max_index + 1; i < (sizeof(arr)/sizeof(*arr)) - 1; i++)
for( int j = i + 1; j < (sizeof(arr)/sizeof(*arr)); j++)
if( std::abs( arr[i] - arr[j]) < 10 )
std::cout << arr[i] << " " << arr[j] << std::endl;
std::cout << std::endl << "Values never satisy the condition and beyond the minimu and maximum range:" << std::endl;
for(int i = (sizeof(arr)/sizeof(*arr)) - 1; i > max_index + 1; i--)
for( int j = i - 2; j > max_index; j--)
if( std::abs( arr[j] - arr[i]) >= 10 )
{
std::cout << arr[i] << std::endl;
break;
}
return 0;
}
实际上,您正在寻找的答案是最后一个循环语句。上面的所有其他内容只是为了确保如果我正确理解您的问题。这是您正在寻找的简短答案:
int max_difference = 0, max_index = 0, min_index = 0;
for(int i = 0; i < (sizeof(arr)/sizeof(*arr)) - 1; i++)
for( int j = i + 1; j < (sizeof(arr)/sizeof(*arr)); j++)
if( (std::abs( arr[i] - arr[j]) > max_difference) && (std::abs( arr[i] - arr[j]) < 10) )
{
max_difference = std::abs( arr[i] - arr[j]);
if(arr[i] > arr[j])
{
max_index = i;
min_index = j;
}
else
{
max_index = j;
min_index = i;
}
}
std::cout << arr[min_index] << " " << arr[max_index] << std::endl;
澄清后编辑
此处提供的解决方案是假设数字按升序排列。这是您的解决方案,但不遵守条件的数字按降序显示:
std::cout << std::endl << "The last combinations respect the condition, but beyond the minimu and maximum range:" << std::endl;
for(int i = max_index + 1; i < (sizeof(arr)/sizeof(*arr)) - 1; i++)
for( int j = i + 1; j < (sizeof(arr)/sizeof(*arr)); j++)
if( std::abs( arr[i] - arr[j]) < 10 )
std::cout << arr[i] << " " << arr[j] << std::endl;
std::cout << std::endl << "Values never satisy the condition and beyond the minimu and maximum range:" << std::endl;
for(int i = (sizeof(arr)/sizeof(*arr)) - 1; i > max_index + 1; i--)
for( int j = i - 2; j > max_index; j--)
if( std::abs( arr[j] - arr[i]) >= 10 )
{
std::cout << arr[i] << std::endl;
break;
}
上面提供了整个代码。看看就知道了。请记住,我添加了45, 99, and 250
.但是当它们显示时,它们将显示为:250, 99, 45
.这很简单,您必须自己重新安排它。我希望它有所帮助。
问候。
相关文章:
- 禁止指针和整数之间的比较C++
- ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较
- 比较它们之间的元素并获取公共值的键
- 零点和布尔值之间的比较
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- C++ - 负数和正数之间的比较返回 false
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- C++模板参数之间的比较似乎被忽略了
- 为什么C++容器之间存在比较运算符
- 错误:ISO C++禁止在指针和整数 [-fallowive] 之间进行比较
- 数字之间的比较
- C++ - 比较模板和类之间的数据类型
- 获取字符串大小的各种方法之间的比较
- 比较器的两个实现之间的差异
- 如何修复C++中的"指针和整数之间的比较"错误?
- 不同指针类型之间的无效比较:'type*' 和 'type&(*)()'
- 符号和未签名整数表达式之间的比较,以进行循环误差
- 比较C 中移动和智能指针之间的习惯
- Python,C ,C#和Java中的字符串比较之间的差异
- 与表达式或变量进行比较之间的性能差异