将所有正整数连在一起,组成一个无限长的字符串 123456789101112131415…

题一:将所有正整数连在一起,组成一个无限长的字符串 123456789101112131415…
你输出该字符串的第 n 位字符。
字符位次从 1 开始计数。

输入描述:
第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含一个整数 n。

输出描述:
每组数据输出占一行,输出第 n 位字符。
1≤T≤1000,1≤n≤1000。

示例1
输入
2
3
11

输出
3
0
题二:
给定一个 n 个点 m 条边的有向图。

图中可能包含重边和自环,也可能不连通。

给每个点分配一个小写字母。

我们定义一条路径的权值为出现频率最高的字母的出现次数。

例如,如果一条路径上的字母是 abaca,则该路径的权值为 3。

请你找到给定图中权值最大的路径,输出这个最大路径权值。

输入描述:
第一行包含两个整数 n和 m。

第二行包含一个由小写字母构成的字符串 s,其中第 i 个字母表示第 i 个点上的字母。

接下来 m 行,每行包含两个整数 x,y 表示存在一条从点 x 到点 y 的边。

所有点的编号为 1∼n。

输出描述:
输出最大路径权值。

如果这个权值是无穷大,则输出 −1。

示例1
输入
5 4
abaca
1 2
1 3
3 4
4 5

输出
3

示例2
输入
6 6
xzyabc
1 2
3 1
2 3
5 4
4 3
6 4

输出
-1

你题目的解答代码如下:

#include<stdio.h>

int main()
{
    int a[1000] = {0},b[5];
    int n,t,i,j=0,k=1,m,x;
    scanf("%d", &t);
    while (j<1000)
    {
        m = k;
        x = 0;
        while (m>0)
        {
            b[x++] = m%10;
            m /= 10;
        }
        while (x>0 && j<1000)
        {
            a[j++] = b[--x];
        }
        k++;
    }

    for(i=0;i<t;i++){
        scanf("%d", &n);
        printf("%d\n",a[n-1]);
    }
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img