洛谷P1014 Cantor表

0
9

一枚蒟蒻的第一篇题解(我竟然一遍过)【本题于2019.10.13 AC】

话不多说直接切入正题

首先列出一个表来找规律:

1/1 …… 1/2 …… 1/3 …… 1/4 …… 1/5 …… 1/6

2/1 …… 2/2 …… 2/3 …… 2/4 …… 2/5

3/1 …… 3/2 …… 3/3 …… 3/4

4/1 …… 4/2 …… 4/3

5/1 …… 5/2

6/1

把头向左倾斜45度就差不多能看出来(真像个z子形


然后找到了规律,这里就不说了,就是和蛇一样

这题给的数不大不小正好不会TLE,直接暴力;

横着为x,纵着为y,即这些数可以表示为x/y;

这就好办了


用两个变量分别储存x,y

然后进行一系列的操作:当x=1时y+1;y=1时x+1;

若是都没有,则看情况向右上或左下变换x,y;

好的,下面就是本题代码了!(为防止抄袭,改了几个地方,嘿嘿)

 1 #include<iostream>
 2 #incldue<cstdlib>
 3 #include<cstdio>
 4 using namespace std;
 5 int mian()
 6 {
 7 
 8     int n,p=0,x=1,y=1,z1=x,z2=y;
 9     cin>>n;
10     for(int i=0;i<n-1;i++)
11     {
12         if(y==1&&z1=x)
13         {
14             x++;
15             z2=x;
16             p=1;
17         }
18         else
19         {
20             if(x==1&&z2==y)
21             {
22                 y++;23                 z1=y;
24                 p=0;25             }
26             else
27             {
28                 if(p==1)//当p==1时,向右下
29                 {
30                     x--;
31                     y++;
32                 }
33                 else//否则向右上
34                 {
35                     x++;
36                     y--;
37                 }
38             }
39         }
40     }
41     cout<<y<<"/"<<x;//输出y/x
42  return 0;
43 }

<

发布回复

请输入评论!
请输入你的名字