hdu 1597 find the nth digit

    xiaoxiao2021-04-13  35

    Problem Description 假设: S1 = 1 S2 = 12 S3 = 123 S4 = 1234 ......... S9 = 123456789 S10 = 1234567891 S11 = 12345678912 ............ S18 = 123456789123456789 .................. 现在我们把所有的串连接起来 S = 1121231234.......123456789123456789112345678912......... 那么你能告诉我在S串中的第N个数字是多少吗? Input 输入首先是一个数字K,代表有K次询问。 接下来的K行每行有一个整数N(1 <= N < 2^31)。 Output 对于每个N,输出S中第N个对应的数字. Sample Input 6 1 2 3 4 5 10 Sample Output 1 1 2 1 2 4 Author 8600

    思路:现在我们根据题意可知道每个字符串的长度,那么我们要找长度为N的字符串的最后一位是多少,我们就可以先求出我们用了多少个完整字符串,我们又得知每个字符串的长度是有规律的,那么我们就可以很快的求出最后一位的数是多少了。

    AC代码:

    #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int main() { int sum; int k; scanf("%d",&k); while(k--) { sum = 0; int n, i = 0; scanf("%d",&n); while(sum < n) ///首先判断长度为n至少需要多少个完整的字符串 { i++; sum+=i; } if(sum == n) ///如果相等 那么第i个字符串的最后一位就是答案 { int m = i % 9; if(m==0) printf("9\n"); else printf("%d\n",m); } else if(sum > n) ///如果大于 说明第i个字符串是拆开的 那么我们就求出第i个字符串到底用了几个, 最后一个就是答案 { sum-=i; int p = n - sum; int q = p % 9; if(q==0) printf("9\n"); else printf("%d\n",q); } } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-669531.html

    最新回复(0)