洛谷P1014 Cantor表
2016-07-08 16:48
435 查看
这个问题我当初看了好久都没看的清楚,后来不经意间歪歪脖子发现了规律。。。
1/1 1/2 1/3 1/4 1/5 … 1/1
2/1 2/2 2/3 2/4 … 2/1 1/2
3/1 3/2 3/3 … =====》 3/1 2/2 1/3
4/1 4/2 … ... ... ... ...
5/1 …
这个问题在判断的时候可以通过单数行和双数行来判定。i%2即可。判定后知道排放的顺序。
这个版本不用数组,因为用数组可能会出问题。(见后面)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,js=1;
cin>>n;
for(int i=2;i<=n;i++){//因为每一行分子分母之和是一定的,故最小2开始
for(int j=1;j<i;j++){//分子不是0!要<j
if(js==n&&i%2==0){//如果分子分母之和是偶数,则在奇数行
cout<<i-j<<"/"<<j;//正向输出
}
else if(js==n&&i%2!=0){//如果分子分母之和是奇数,则在偶数行
cout<<j<<"/"<<i-j;//反向输出
}
js++;
}//如果计数到达了n,说明可以输出了。
}
return 0;
}
更优的解法,不要判断奇偶行数。 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,N=0,line=0,order=0;
int main() {
cin>>n;
while( N < n ){
line++;
N+=line;
}
order = line - (N-n) ;
cout<< line - order +1 << "/" << order;
return 0;
}
(这个版本RE,初步判断数组超界)
1/1 1/2 1/3 1/4 1/5 … 1/1
2/1 2/2 2/3 2/4 … 2/1 1/2
3/1 3/2 3/3 … =====》 3/1 2/2 1/3
4/1 4/2 … ... ... ... ...
5/1 …
这个问题在判断的时候可以通过单数行和双数行来判定。i%2即可。判定后知道排放的顺序。
这个版本不用数组,因为用数组可能会出问题。(见后面)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,js=1;
cin>>n;
for(int i=2;i<=n;i++){//因为每一行分子分母之和是一定的,故最小2开始
for(int j=1;j<i;j++){//分子不是0!要<j
if(js==n&&i%2==0){//如果分子分母之和是偶数,则在奇数行
cout<<i-j<<"/"<<j;//正向输出
}
else if(js==n&&i%2!=0){//如果分子分母之和是奇数,则在偶数行
cout<<j<<"/"<<i-j;//反向输出
}
js++;
}//如果计数到达了n,说明可以输出了。
}
return 0;
}
更优的解法,不要判断奇偶行数。 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,N=0,line=0,order=0;
int main() {
cin>>n;
while( N < n ){
line++;
N+=line;
}
order = line - (N-n) ;
cout<< line - order +1 << "/" << order;
return 0;
}
(这个版本RE,初步判断数组超界)
#include<iostream> #include<cstdio> using namespace std; int fzz[1000010],fmz[1000010],js=1; //fzz:分子数组;fmz:分母数组;js:个数计数 int main(){ int h1,h2,n; cin>>n; for(int i=2;i<=n;i++){ for(int j=1;j<i;j++){ if(i%2==0){//如果行数是奇数 fzz[js]=i-j;fmz[js]=j;//因为分子分母之和是i,所以i-j; js++; } else{//如果行数是偶数 fzz[js]=j;fmz[js]=i-j;//反向添加进数组 js++;//增加计数 } } } cout<<fzz <<"/"<<fmz ;//输出 return 0; }
相关文章推荐
- P1478
- P1035
- P1008 难度2.7
- 【题解】洛谷1164小A点菜
- 好吧,没事抒抒情
- 洛谷P2089 烤鸡
- 洛谷P1598 垂直柱状图
- 洛谷P1028 数的计算
- 洛谷P1914 小书童——密码
- 洛谷P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here
- 洛谷P1553 数字反转(升级版)
- 洛谷P1035 级数求和
- 10.1做题——洛谷P1433 吃奶酪
- 10.9做题——洛谷P1927防护伞
- 10.10做题——USACO1.2/洛谷1207双重回文数(Dual Palindromes)
- 洛谷P1196银河英雄传说
- 洛谷P1115最大子段和
- 洛谷1086/NOI题库1.13.38/NOIP2004普及组第2题 花生采摘
- 洛谷P1024/NOI题库7891(2.3)/NOIP2001提高组T1 一元三次方程求解
- NOIP2002提高组/洛谷P1031均分纸牌