• 【CodeVS】1083 Cantor表


    1083 Cantor表

    1999年NOIP全国联赛普及组

    时间限制: 1 s
    空间限制: 128000 KB
    题目等级 : 白银 Silver
    题目描述 Description

    现代数学的著名证明之一是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,…

    输入描述 Input Description

    整数N(1≤N≤10000000)

    输出描述 Output Description

    表中的第N项

    样例输入 Sample Input

    7

    样例输出 Sample Output

    1/4

    数据范围及提示 Data Size & Hint

    见描述


    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    
    long long n;
    
    int erfen()
    {
    	int left=1,right=1500;
    	int mid;
    	while(left+1<right)
    	{
    		mid=left+(right-left)/2;
    		long long ans=(mid*mid-mid)/2+1;
    		if(ans>n)
    			right=mid;
    		else if(ans==n)return mid;
    		else 
    			left=mid;
    	}
    	return left;
    }
    int main()
    {
    	scanf("%d",&n);
    	int num=erfen();
    	if(!(num%2))
    	{
    		int k=n-(num*num-num)/2;
    		printf("%d/%d",k,num+1-k);
    	}
    	else
    	{
    		int k=n-((num*num-num))/2;
    		printf("%d/%d",num+1-k,k);
    	}
    	return 0;
    }

    将这个东西顺时针旋转一下成三角形,第n行最左边数字的编号n*(n-1)/2+1。奇数行从左往右数,偶数行从右往左走。


    根据上述小学奥数推论写程序即可。仍有疑惑请下方评论,每周三下午||周日晚上||大休||节假日答复。

  • 相关阅读:
    python学习之列表和字典
    python学习之字符串(下)
    python学习之数字
    python学习之核心数据类型
    android 学习Layout布局的使用
    android学习SeekBar的使用
    android学习Gallery和ImageSwitch的使用
    android学习ScrollView的使用
    android学习ViewFlipper的使用
    C#怎么判断传入int值是否是枚举里面的值
  • 原文地址:https://www.cnblogs.com/huibixiaoxing/p/6537752.html
Copyright © 2020-2023  润新知