帮帮忙,用二分法怎么写

1、给定一串递增数列,找到其中两个不同的数字 a[i] 和 a[j],使得a[i] + a[j] = k,并输出较小的那个数

如果有组a[i] 和 a[j] 满足条件,则输出其中数值最小的数,如果没有找到,输出-1
2、有一串无限长数列由所有正整数递增构成,即:12345678910111213...

求该数列上的第 k 个数字是多少

请问是用Java还是C语言实现呢?

#include <stdio.h>
int main() {
      
    int a[10],i;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    int n;
    scanf("%d",&n);
    for(i=0;i<10;i++)
    {
        int k = n-a[i];
        int p=i+1,q=9;
        int t = (p+q)/2;
        while(a[t] != k && p<q)
        {
            if(p==q-1)
            {
                if(a[p] == k)
                {
                    t = p;
                    break;
                }
                if(a[q] == k)
                {
                    t =q;
                    break;
                }
                p=q;
                break;
            }
            if(a[t] < k)
                p = t;
            else
                q = t;
            t = (p+q)/2;
        }
        if(p<q)
        {
            printf("%d+%d=%d\n",a[i],a[t],a[i]+a[t]);
            break;
        }
    }
    if(i==10)
        printf("error");
    return 0;
}
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^