TYVJ P1875 [NOIP1999P1]Cantor表
来源:互联网 发布:淘宝的nike是真的吗 编辑:程序博客网 时间:2024/06/17 23:47
P1875 [NOIP1999P1]Cantor表
时间: 1000ms / 空间: 131072KiB / Java类名: Main
描述
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
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 …
…
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
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 …
…
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入格式
整数N(1≤N≤10000000)
输出格式
表中的第N项
测试样例1
输入
7
输出
1/4
这是一种有理数集非常常见的列法,我们考虑对角线上的元素q/p,发现q + p是一个常数。
设读入的数为 num,那么,它必然在某一条对角线上,然后我们要找到一个n,使得
n*(n+1)/2 <= num <= (n+1)(n+2)/2
num必然在第 n + 1条对角线上, 然后设 D = num - n*(n+1)/2 ,然后讨论n的奇偶性,答案就很显然了
n = 奇 D/n+2-D
n = 偶 n+2-D/D#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;int num;int main(){scanf("%d",&num);if (num == 1){cout<<"1/1"<<endl;return 0;}for (int n = 1;n <= num;n++){int A = n * (n + 1) / 2;int B = (n + 1) * (n + 2) / 2;if (A <= num && num <= B){int D = num - A;if (n & 1) cout<<D<<"/"<<n + 2 - D<<endl;else cout<<n + 2 - D<<"/"<<D<<endl;break;}}return 0;}
0 0
- TYVJ P1875 [NOIP1999P1]Cantor表
- Cantor表
- Cantor表
- Cantor表
- cantor表
- Cantor表
- Cantor表
- Cantor表
- cantor表
- Cantor表
- Cantor表
- Cantor表
- Cantor表
- Cantor表
- Cantor表
- WikiOI 1083 Cantor表
- wikioi p1083 Cantor表
- wikioi 1083 Cantor表
- tomcat的jvm和session同步配置
- Android应用性能优化之使用SparseArray替代HashMap
- 汉化修改so文件心得篇一(带偏移修改)
- 百度地图之---定位实现 并显示定位结果地图
- JDK安此博文包含图片装后 没有tools.jar 和dt.jar包的解决办法
- TYVJ P1875 [NOIP1999P1]Cantor表
- android-volley 图片缓存分析与比较
- 计数排序
- 怎么在ScrollView中使用ListView
- ext3,ext4,xfs和btrfs文件系统性能对比
- MYSQL慢查询
- SQL点滴27—性能分析之执行计划
- Swift学习笔记-UI
- ACM做题过程中知识点学习