数列问题-c#求解-英雄会在线编程题目
来源:互联网 发布:c语言100以内素数之和 编辑:程序博客网 时间:2024/04/29 12:35
最近csdn上有出了好多道题目,做了几道题,却一直没发上来,今天就吧这道数列问题解法放上来。
- 发布公司:
- 有 效 期:
- 赛 区:
- CSDN
- 2014-02-26至2014-03-28
- 北京
- 难 度 等 级:
- 答 题 时 长:
- 编程语言要求:
- 120分钟
- C C++ Java C#
步骤:
根据思路,一步一步求解
1、第一步求给出的n能够写成多长的字符串,这个比较容易。
int lenght = 0;
int p=0;
int t=n;
int count =0;
while (t > 9)
{
p++;
lenght +=(int)( p * (Math.Pow(10, p) - Math.Pow(10, p - 1)));
t = t / 10;
}
lenght += (int)((p+1)*(n - Math.Pow(10, p)+1));
第二步:求出了长度lenght,就需要知道,经过多少轮后只剩一个字符。
t = lenght;
while (t > 1)
{
if (count % 2 == 0)
{
if (t % 2 == 1)
{
t = (t + 1) / 2;
}
else
{
t = t / 2;
}
}
else
{
if (t % 2 == 1)
{
t = (t - 1) / 2;
}
else
{
t = t / 2;
}
}
count++;
}
第三步就是逆推回去了,最后留下的这个字符,编号为1,那么它在原来的字符串中的编号。这里需要注意,我们假设原来的字符串编号是从1开始的。因为这里主要都是按照个数来算的。
p = 1;
while (count > 0)
{
if (count % 2 == 0)
{
p = p * 2;
}
else
{
p = 2 * p - 1;
}
count--;
}
所以我们很容易逆推回去,最后留下的这个字符在原有字符串中的编号。
第四步:就是搞清楚第几个字符是多少。
规律很简单,1~9,都是1位的
10~99都是两位的,
......
直到我们找到n所在的范围区间,就可以了。
t = p;
p = 0;
lenght = 0;
int tmp = 0;
while (true)
{
p++;
tmp= (int)(p * (Math.Pow(10, p) - Math.Pow(10, p - 1)));
if (t <= lenght+tmp)
{
t = t - lenght;
int yushu = t % p;
int cusu = t / p;
if (yushu == 0)
{
yushu = p;
cusu--;
}
result = (int)Math.Pow(10, p - 1) + cusu;
result = Convert.ToInt32(result.ToString().Substring(yushu - 1, 1));
break;
}
lenght += tmp;
}
- 数列问题-c#求解-英雄会在线编程题目
- 平衡二叉树--c#求解--英雄会在线编程题目
- 朋友的礼物-c#求解-英雄会在线编程题目
- 建立信号基站-c#求解-英雄会在线编程题目
- 罐子和硬币-c#求解-英雄会在线编程题目
- 排列搜索-c#求解-英雄会在线编程题目
- 二叉树-c#求解-英雄会在线编程题目
- P次方数-c#求解-英雄会在线编程题目
- P次方数-c#求解-英雄会在线编程题目
- 无穷字符串-c#求解-英雄会在线编程题目
- 最小操作数-c#求解-英雄会在线编程题目
- 24点游戏-c#求解-英雄会在线编程题目
- xor值最大-c#求解-英雄会在线编程题目
- 彩色石子-c#求解-英雄会在线编程题目
- 堆放木块-c#求解-英雄会在线编程题目
- -3+1-c#求解-英雄会在线编程题目
- F(X)--c#求解-英雄会在线编程题目
- 另类编辑距离-c#求解-英雄会在线编程题目
- Log4j配置
- 1183 守形树 (%运算的使用)
- 自动加注释(理解错误了)
- 计算机网络基础
- 小伙整容成雷锋后亮相,网友:快做好事去吧
- 数列问题-c#求解-英雄会在线编程题目
- SVN 提交小结
- TreeSet构造树集时用自定义的Compat
- 详细讲解JavaScript数组的操作
- 第四届蓝桥杯马虎的计算
- spring mvc几个重要的核心类和接口
- 我的论文
- 为什么HierachyViewer无法连接真机调试
- linux使用autofs自动挂载windows共享