这是一个问题SPOJ
小费鲁达非常喜欢玩。如你所知,他只玩数字。所以给了他n个数字。现在尝试将这些数字分组为不相交的集合,每个集合包含两个数字。他可以形成包含两个数字的集合,当且仅当集合中的小数恰好是大数的一半。
给定 n 个数字,找出他最多可以形成多少个集合?
输入
T:测试用例的数量。(1 <= T <= 100)。
对于每个测试用例:
第一行将包含 n : (1 <= n <= 100)
然后下一行将包含 n 个数字,单个空格分隔。每个数字的范围将在 1 到 10^6 之间。
输出
对于每个测试用例,输出可以形成的最大集合数。
例子
输入:
2
2
1 2
3
1 2 4
输出:
1
1
我的代码::
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
int t;
scanf("%d", &t);
while (t--) {
int n, i, j;
scanf("%d", &n);
long int arr[n], mini, maxi;
char str[105];
for (i = 0;i < n;i++) {
str[i] = '0';
scanf("%ld", &arr[i]);
}
for (i = 0;i < n;i++) {
for (j = 0;j < n;j++) {
mini = fmin(arr[i], arr[j]);
maxi = fmax(arr[i], arr[j]);
if ((maxi == 2 * mini) && (str[i] == '0' && str[j] == '0')) {
str[i] = str[j] = '1';
break;
}
}
}
long int cnt = 0;
for (i = 0;i < n;i++) {
if (str[i] == '1') {
cnt++;
}
}
printf("%ld\n", cnt / 2);
}
return 0;
}
有人可以指出我哪里出错了或者我遗漏了任何角落测试用例吗?