对于输入的n个整数,先进行升序排序,然后进行二分查找。

输入格式:

测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个各不相同的待排序的整数,第三行是查询次数m(1≤m≤100),第四行输入m个待查找的整数。

输出格式:

对于每组测试,分2行输出,第一行是排序后的升序的结果,每两个数据之间留一个空格;第二行是查找的结果,若找到则输出排序后元素的位置(从1开始,每两个数据之间留一个空格),否则输出0。

输入样例:

9
4 7 2 1 8 5 9 3 6
5
10 9 8 7 -1

输出样例:

1 2 3 4 5 6 7 8 9
0 9 8 7 0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

代码 :

#include<stdio.h>
int a[10010];
int b[10010];
int main() {
    int n;
    while (scanf("%d",&n)!=EOF) {
        int flag = 0;
        int m;
        for (int i = 0;i < n;++i) {
            scanf("%d", &a[i]);
        }
        scanf("%d", &m);
        for (int i = 0;i < m;++i) {
            scanf("%d", &b[i]);
        }
        for (int i = 0;i < n;++i) {
            for (int j = 0;j < n - 1 - i;++j) {
                if (a[j] > a[j + 1]) {
                    int t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
        }
        for (int i = 0;i < n;++i) {
            if (flag == 1)
                printf(" %d", a[i]);
            else
                printf("%d", a[i]);
            flag = 1;
        }
        printf("\n");
        for (int j = 0;j < m;++j) {
            int flag = 0;
            for (int i = 0;i < n;++i) {
                if (a[i] == b[j]) {
                    if (j != m - 1)
                        printf("%d ", i + 1);
                    else
                        printf("%d", i + 1);
                    flag = 1;
                }
            }
            if (flag == 0) {
                if (j != m - 1)
                    printf("0 ");
                else
                    printf("0");
            }
        }
        printf("\n");
    }
}

先对着自己写的代码理解一下,遇到不懂的再在群上问或者问我。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐