如下数列,第一项是1/1,第二项是1/2,第三项是2/1,第四项是3/1,第五项是2/2,……。输入n,输出第n项。
1/1   1/2   1/3   1/4   1/5
2/1   2/2   2/3   2/4
3/1   3/2   3/3
4/1   4/2
5/1
样例输入:
3
14
7
12345
样例输出:
2/1
2/4
1/4
59/99

方法一:

 #include <stdio.h>
int main()
{
int n;
while(scanf("%d", &n) == )
{
int k = , s = ;
for(; ; )
{
s += k;
if(s >= n) //s为k条斜线上数的总和
{
if(k% == ) printf("%d/%d\n", s-n+, k-s+n); //表示输出第k斜线倒数第s-n+1项
else printf("%d/%d\n", k-s+n, s-n+); //表示输出第k斜线正数第k-(s-n+1)+1项,即k-s+n项
break;
}
k++;
}
}
return ;
}

分析:
  1.数表按斜线分类,第1条斜线有1个数,第2条斜线有2个数……第i条斜线有i个数,这样,前i条斜线一共有S(k)=1+2+3+…+k=k(k+1)/2个数;并且是一条斜线从上到下,另一条斜线从下到上交错排数。
  2.确定n所在斜线:只要找到一个最小的正整数k,使得n<=S(k),那么n就是第k条斜线上的倒数第S(k)-n+1个元素(最后一个元素是倒数第一个元素,而不是倒数第零个元素);则第k条斜线的倒数(k为奇数时,第k斜线倒序)第i个元素是i/(k+1-i),正数(k为偶数时,第k斜线正序)第i个元素是(k+1-i)/i。

方法二:

 #include <stdio.h>
#include <math.h>
int main()
{
int n;
while(scanf("%d", &n))
{
int k = (int)floor((sqrt(8.0*n+)-) / -1e-) + ; //使用floor函数避免浮点误差
int s = k*(k+) / ; //s为k条斜线上数的总和
if(k% == ) printf("%d/%d\n", s-n+, k-s+n); //表示输出第k斜线倒数第s-n+1项
else printf("%d/%d\n", k-s+n, s-n+); //表示输出第k斜线正数第k-(s-n+1)+1项,即k-s+n项
}
return ;
}

分析:
  1.利用代数,n<=k*(k+1)/2,k*k+k-2n>=0,(k-(sqrt(8.0*n+1)-1)/2)*(k-(-sqrt(8.0*n+1)-1)/2)>=0,注意到k-(-sqrt(8.0*n+1)-1)/2总是正数,则k>=(sqrt(8.0*n+1)-1)/2;换言之,可以直接求出则k=(sqrt(8.0*n+1)-1)/2。
  2.floor()函数,其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接去掉小数部分);
  3.指数形式:由于计算机输入或输出时,无法表示上角或下角,规定以字母e或E代表以10为底的指数;注意:e或E之前必须有数字,e或E后面必须是带符号的十进制整数,长度最大为3位,正数时可不写+号。

方法三:

 #include <stdio.h>
int main()
{
int n;
while (scanf("%d", &n) == )
{
int k = ;
while (k < n) //k为第n项所在行数,循环的意义为所求数在第k条斜线第n项
{
n -= k; //n减去第k条斜线上的数
k++;
}
if (k% == ) printf("%d/%d\n", k+-n, n); //表示输出第k斜线倒数第(k-n)+1项
else printf("%d/%d\n", n, k+-n); //表示输出第k斜线正数第n项
}
return ;
}

分析:

  用n减去前k条斜线上的个数后再和第k条斜线上个数相比即得所求数位置。

《算法竞赛入门经典》5.41数学基础-Cantor的数表的更多相关文章

  1. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  2. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  3. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  4. [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...

  5. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

  6. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

  7. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth

    A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...

  8. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  9. 算法竞赛入门经典 LA 4329(树状数组)

    题意: 一排有着不同能力值的人比赛,规定裁判的序号只能在两人之间,而且技能值也只能在两人之间 问题: <算法竞赛入门经典-训练指南>的分析: 上代码: #include<iostre ...

  10. 算法竞赛入门经典——读书笔记day1

    1-1:整数值用%d输出,实数用%f输出. 1-2:整数/整数=整数,浮点数/浮点数=浮点数. 1-3:scanf中的占位符和变量的数据类型应一一对应,且每个变量前需要加&符号. 1-4:在算 ...

随机推荐

  1. 很不错的jQuery学习资料和实例

    这些都是学习Jquery很不错的资料,整理了一下,分享给大家. 希望能对大家的学习有帮助. 帕兰 Noupe带来的51个最佳jQuery教程和实例, 向大家介绍了jQuery的一些基本概念和使用的相关 ...

  2. 方法过滤器,分布式缓存 Memcached实现Session解决方案

    控制器-〉方法过滤器-〉controller-> 方法 所以通过建立controller基类的方法进行方法过滤,所有控制器先执行基类的OnActionExecuting 方法. using Sp ...

  3. System.IO.File.Create 不会自动释放,一定要Dispose

    这样会导致W3P进程一直占用这个文件 System.IO.File.Create(HttpContext.Current.Server.MapPath(strName)) 最好加上Dispose Sy ...

  4. 再谈Bellman-Ford

    这几天学校女生节,挺累的,感觉还是挺好玩的,前几天看了一下最短路,Bellman-fort算法果然比较厉害,今天又参考了刘汝佳的两本书,有了一点新的认识. 废话不说,先上代码: #include &l ...

  5. 【设计模式】常用de单例模式

    > 单例模式 单例模式,是常见的设计模式之一,一般来说,是程序员较早接触的模式之一.嘻嘻,包括我~~~ > 分类 一般来说,分两种: 饿汉模式.非常饿嘛,一上来就加载了,所以,就是非延迟加 ...

  6. [问题2014S14] 解答

    [问题2014S14]  解答 首先, 满足条件的 \(\varphi\) 的全体特征值都为零. 事实上, 任取 \(\varphi\) 的特征值 \(\lambda\), 对应的特征向量为 \(0\ ...

  7. Spring 定时任务1

    转载自 http://blog.csdn.net/prisonbreak_/article/details/49180307 Spring配置文件xmlns加入 xmlns:task="ht ...

  8. Oracle的select使用

    1.select : 语法: select [distinct] {*,column [alias],...} from table 注:[]括起来的内容代表可有可无 * 代表所有列 distinct ...

  9. Robots.txt 协议详解及使用说明

    一.Robots.txt协议 Robots协议,也称为爬虫协议.机器人协议等,其全称为“网络爬虫排除标准(Robots Exclusion Protocol)”.网站通过Robots协议告诉搜索引擎哪 ...

  10. linux 知识汇总

    1 ) linux下文件系统类型的学习 2 )深入理解linux i节点(inode) 3 )RAID系列