华师一附中OI组
标题:
P1014 Cantor表
[打印本页]
作者:
admin
时间:
2018-4-27 13:19
标题:
P1014 Cantor表
题目描述
现代数学的著名证明之一是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,…
输入输出格式
输入格式:
整数N(1≤N≤10000000)
输出格式:
表中的第N项
输入输出样例
输入样例#1:
7
输出样例#1:
1/4
作者:
admin
时间:
2018-4-27 13:29
#include <iostream>
using namespace std;
int n;
int i,s,k,x,y;
int main()
{
cin>>n;
for (s=0,i=1; s+i<n; i++) s=s+i; ///找到n位于第几斜行i
k=n-s; ///此行的第几个k
///cout<<s<<' '<<i<<' '<<k; 检查
if (i%2) x=i-k+1; ///方向判断
else x=k;
y=(i+1)-x;
cout<<x<<'/'<<y<<endl;
复制代码
作者:
universehyf
时间:
2018-7-5 21:53
这一题考查意图应该是模拟,大多数人也选择用模拟做,有些人选择用二分,在下蒟蒻佩服大佬的做法。但是从数学的角度分析,其实可以一两步算出来。
#include<iostream>
#include<cmath>
using namespace std;
int n,c,c1;
int main()
{
cin>>n;
c=sqrt(2*n)+1; //这是整个程序的智慧精髓,根据等差数列
c1=n-c*(c-1)/2; //公式和为n*(n+1)/2=n^2+n/2,分析即可
if(c1>0) //得到从1一直加到sqrt(n)-1或
if(c%2==0) //sqrt(n)-2可得到n,下一斜行c即是
cout<<c1<<"/"<<c-c1+1;//加1得到;用c1算出剩下
else //几,利用奇偶相反算。
cout<<c-c1+1<<"/"<<c1;
else //利用c1正负判断是哪个
{
c--;
c1=n-c*(c-1)/2;
if(c%2==0)
cout<<c1<<"/"<<c-c1+1;
else
cout<<c-c1+1<<"/"<<c1;
}
return 0;
}
复制代码
作者:
universehyf
时间:
2018-7-8 15:27
这一题考查意图应该是模拟,大多数人也选择用模拟做,有些人选择用二分,在下蒟蒻佩服大佬的做法。但是从数学的角度分析,其实可以一两步算出来。
#include<iostream>
#include<cmath>
using namespace std;
int n,c,c1;
int main()
{
cin>>n;
c=sqrt(2*n)+1; //这是整个程序的智慧精髓,根据等差数列
c1=n-c*(c-1)/2; //公式和为n*(n+1)/2=n^2+n/2,分析即可
if(c1>0) //得到从1一直加到sqrt(n)-1或
if(c%2==0) //sqrt(n)-2可得到n,下一斜行c即是
cout<<c1<<"/"<<c-c1+1;//加1得到;用c1算出剩下
else //几,利用奇偶相反算。
cout<<c-c1+1<<"/"<<c1;
else //利用c1正负判断是哪个
{
c--;
c1=n-c*(c-1)/2;
if(c%2==0)
cout<<c1<<"/"<<c-c1+1;
else
cout<<c-c1+1<<"/"<<c1;
}
return 0;
}
复制代码
作者:
吴语林
时间:
2018-7-29 20:24
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int i,n,j=1,all=0,k;
scanf("%d",&n);
for(i=1;;i++)
{
j=i%2;
if(all+i<=n)
all+=i;
else
{
k=n-all;
if(k==0)
k++,i--;
j++;
if(j==1)
{
printf("%d/%d",k,i+1-k);
}
else
{
printf("%d/%d",i+1-k,k);
}
return 0;
}
}
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2