Find the Nth Character
链接:https://ac.nowcoder.com/acm/contest/877/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
Mr Cheng今天在给HLJU的同学们上程序算法课的时候出了一道找规律的题目,题目表述如下
假设:
S1=a
S2=ab
S3=abc
S4=abcd
……
S26=abcdefghijklmnopqrstuvwxyz
S27=abcdefghijklmnopqrstuvwxyza
S28=abcdefghijklmnopqrstuvwxyzab
……
S52=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
……
现在Mr Cheng要求上课的同学们把所有的串依次连接起来,于是得到:
S=aababcabcdabcde……
那么你能告诉Mr Cheng在S串中的第N个字母是多少吗?
输入描述:
输入首先是一个数字K,代表有K次询问
接下来的K行每行有一个N整数
输出描述:
对于每次询问,输出S串中第N个位置对应的字母。
示例1
输入
6
1
2
3
4
5
10
输出
a
a
b
a
b
d
大声BB
本来以为是签到题,本来就想签个到,
没想到,花了一个多小时。哭唧唧
想
法
真
的
很
简
单
,
代
码
也
不
难,
可能是走的路太少,踩得坑太浅,对大多数人来说,可能就是要注意取余,
不过我的问题好像是内存超限来着的,提交了好多次,一直没发现,后来改了一下数组大小,A了
贴代码
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctype.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<iomanip>
#include<list>
#include<fstream>
using namespace std;
typedef long long ll;
int f[20010];
void first(){
int num=1;
int index=1;
int sum=0;
for(int i=1;sum<=10000;i++){
num=1;
for(int j=1;j<=i;j++){
f[index++]=num++;
if(num>26) num=1;
}
sum+=i;
}
}
int main(){
int k;
int n;
scanf("%d",&k);
first();
while(k--){
scanf("%d",&n);
printf("%c\n",f[n]+'a'-1);
}
return 0;
}