p1014Cantor表,找规律/暴力

找规律,先打表


我们可以发现这个就是一行一行的排列,
第一行一个,第二行两个。。。。
所以我们可以求出n所在行最后一个是第几个,
然后求出n的所在位置,(x,y)x+y==每行个数num-1
当然所在位置单行是顺着排,双行是逆着排
试几个数求出就可以了
#include <bits/stdc++.h>
using namespace std;
int n,sum,num;

int main(int argc, char** argv) {
	cin>>n;
	while(sum<n){//找到n所在行的最后一个数的顺序
		num++;
		sum+=num;
	} 
	if(num%2){
		cout<<sum-n+1<<"/"<<num-sum+n<<endl;//试着求出
	}else{
		cout<<num-sum+n<<"/"<<sum-n+1<<endl;
	}
	return 0;
}



这个直接暴力可以a掉
#include <bits/stdc++.h>
using namespace std;

int n;
int main(){
	cin>>n;
    for(int i=1,j=1,cnt=1;cnt<n;){
    	while(i-1>0&&cnt<n) --i, ++j, cnt++;//走到上界转弯
    	if(cnt<n) ++j, cnt++;
    	while(j-1>0&&cnt<n) ++i, --j, cnt++;//走到下界转弯
    	if(cnt<n) ++i, cnt++;
    	if(cnt==n) printf("%d/%d\n",i,j);
	}
	return 0;
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务