69,369
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
int intcmp(const void *a, const void *b)
{
const int ia = *(const int *)a;
const int ib = *(const int *)b;
if (ia > ib) return 1;
else if (ia == ib) return 0;
else return -1;
}
int binary_search(int arr[], int n, int key)
{
int high, low, mid;
low = 0;
high = n - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (key > arr[mid])
low = mid + 1;
else if (key < arr[mid])
high = mid - 1;
else
return mid;
}
return -1;
}
#define N 5
#define M 5
typedef struct coordinate {
int x; int y;
} coordinate_t;
int main(void)
{
int arr[N][M];
int tcn, key, pos;
coordinate_t *cos;
int i, j, k;
printf("请输入测试用例数量:");
scanf("%d", &tcn);
if ((cos = (coordinate_t *)malloc(sizeof(coordinate_t) * tcn)) == NULL)
{
fprintf(stderr, "Out of memory!\n");
exit(EXIT_FAILURE);
}
for (i = 0; i < tcn; i++)
{
printf("请输入要查找的数字:");
scanf("%d", &key);
printf("请输入被查找的数据:\n");
for (j = 0; j < N; j++)
for (k = 0; k < M; k++)
scanf("%d", &arr[j][k]);
// 排序输人数据
qsort((void *)arr, N*M, sizeof(int), intcmp);
pos = binary_search((int *)arr, N*M, key);
if (pos != -1)
{
cos[i].x = pos / M;
cos[i].y = pos % M;
}
else
{
cos[i].x = -1;
cos[i].y = -1;
}
/*{
#define NUM_ELEM(a) sizeof(a) / sizeof((a)[0])
#define CREATE_TC(nm) {#nm, NUM_ELEM(nm), nm}
typedef struct test_case {
const char* name;
int n;
int *data;
} tc_t;
int t1[1] = {1};
int t2[2] = {1, 3};
int t3[3] = {1, 3, 5};
int t4[4] = {1, 3, 5, 7};
int t5[5] = {1, 3, 5, 7, 9};
tc_t tcs[] = {
CREATE_TC(t1), CREATE_TC(t2), CREATE_TC(t3), CREATE_TC(t4), CREATE_TC(t5)
};
int i;
binary_search(t1, 0, 100);
for (i = 0; i < NUM_ELEM(tcs); i++)
{
int s = tcs[i].data[0] - 1;
int e = tcs[i].data[tcs[i].n - 1] + 1;
printf("searching %s...\n", tcs[i].name);
for (key = s; key <= e; key++)
{
int pos = binary_search(tcs[i].data, tcs[i].n, key);
if (pos != -1)
printf("Found %d from %s at postion %d\n", key, tcs[i].name, pos);
else
printf("Can't find %d from %s\n", key, tcs[i].name, pos);
}
printf("\n\n");
}
}*/
}
for (i = 0; i < tcn; i++)
printf("(%d, %d)\n", cos[i].x, cos[i].y);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int t,i,j,x,index,a[5][5];
int *p=(int*)a;
scanf("%d",&t);
while(t--)
{
scanf("%d",&x);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
qsort(p,25,sizeof(int),cmp);
i=0,j=24,index=-1;
while(i<=j)
{
int mid=(i+j)/2;
if(p[mid]==x)
{
if(mid>0&&p[mid-1]==x)
j=mid-1;
else
{
index=mid;
break;
}
}
else if(p[mid]>x)
j=mid-1;
else
i=mid+1;
}
if(index==-1)
printf("-1 -1\n");
else
printf("%d %d\n",index/5,index%5);
}
}
或者输入的时候不要a[][],直接
{
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&p[i*5+j]);
}