洛谷| P1014 Cantor表
分析:
读题后觉得是一道模拟题
移动的方式总共有四种
右移一位
下移一位,左移一位
下移一位
右移一位,上移一位
这样四种方式下来算作一轮
第一轮的↓←,有一次
第一轮的→↑,有两次
第二轮...
所以,第x轮的↓←有2*x-1次
→↑有2*x次
每一次操作后n--
每一次操作前判断n是否还大于1
#include<iostream> #include<cstring> using namespace std; int n,k1=1,k2=1; void yy(){ n--; k2++; } void xy(){ n--; k1++; } void xyzy(){ n--; k1++; k2--; } void yysy(){ n--; k1--; k2++; } int main(){ cin>>n; int x=0;//轮数,第几轮 int flag=0; int i1,i2,r;//控制循环次数 if(n==1){ cout<<1<<"/"<<1; flag=1; } if(!flag){ while(n>1){ yy(); x++; i1=2*x-1; i2=2*x; if(n>1){ for(r=1;r<=i1;r++){ if(n<=1) break; xyzy(); } } if(n>1){ xy(); } for(r=1;r<=i2;r++){ if(n<=1) break; yysy(); } } cout<<k1<<"/"<<k2; } return 0; }