我有几个小时在思考这个问题的可能解决方案,而且我得到了一个,但是太长了,我认为我的解决方案比平时更难。
你能帮助我在C中实现这个结果吗?
输入(示例):
int input[4] = {40, 10, 50, 23}
//The solution would be 2, 0, 3 ,1
input[0] = 40;
input[1] = 10;
input[2] = 50;
input[3] = 23;
我想要的是什么:
int order[4] = {2, 0, 3, 1}
顺便说一下,我需要维护输入数组,所以我真的需要为订单创建另一个。
修改:
嗯,我修改了一些代码,这对我有用,Thx家伙。
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (i==j)
continue;
if (decimalpart[i]<decimalpart[j])
ordem[i]++;
}
}
这也适用于双打/浮点数。不是这个具体的例子,数组列表是随机的。
答案 0 :(得分:1)
你在这里:
int i,j;
int input[] = {40, 10, 50, 23};
int size = sizeof(input)/sizeof(int);
int order[size];
for (i = 0; i < size; i++) {
order[i] = 0;
}
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
if (i==j) {
continue;
}
if (input[i]>input[j]) {
order[i]++;
}
}
}
for (i = 0; i < size; i++) {
printf("%d, ",order[i]);
}