#include <iostream>
using namespace std;
class A
{
public:
int index;
int t;
int d;
int sum;
};
A arr[1000];
bool comp (const A &a, const A &b)
{
if (a.sum < b.sum)
return true;
else if (a.sum == b.sum && a.index < b.index)
return true;
return false;
}
int main (void)
{
int n,foo,bar,i;
i = 0;
cin>>n;
while ( n != 0 )
{
cin>>foo>>bar;
arr[i].index = i+1;
arr[i].t = foo;
arr[i].d = bar;
arr[i].sum = arr[i].t+arr[i].d;
n--;
i++;
}
sort(arr,arr+n,comp);
for ( int j = 0; j < n; j++ )
cout<<arr[j].index;
cout<<"\n";
return 0;
}
因此,我制作了这个接受用户值的程序,然后根据特定条件对它们进行排序。但是,当我尝试打印数组的值时,它不会打印它。我不知道为什么。请帮忙。谢谢!
PS:我甚至试图在不使用比较器功能的情况下打印数组的值,但它仍然没有打印。
编辑:得到了我的错误,正如评论中一些了不起的人所提到的那样。但是,在输入值为
时5
8 1
4 2
5 6
3 1
4 3
它应该以{{1}}的形式返回答案,而是返回4 2 5 1 3
。基本上,它根据每行中2个元素的总和进行排序并打印索引。可能是什么问题?
答案 0 :(得分:0)
由于您要在n
循环中修改while
的值,因此不进行排序。
所以,当循环结束后的n = 0
时,没有什么可以排序(或者稍后打印):
sort( arr, arr + n, comp);
相当于
sort( arr, arr + 0, comp);
最简单的方法是使用for
循环:
for( int i=0; i<n; ++i )
{
....
}
这样,n
保持不变。