4 条题解

  • 3
    @ 2024-10-29 18:40:25
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n, i;
        cin >> n;
        
        // 找到第 N 项所在的斜线 k
        for (i = 1; n > i; i++) n -= i;
        // 确定分子和分母
        if (i % 2 == 0) cout << n << '/' << i + 1 - n;
        else cout << i - n + 1 << '/' << n;
    
        return 0;
    }
    
    • 1
      @ 2025-10-8 16:20:56
      #include<bits/stdc++.h>
      using namespace std;
      int n,i;
      int main(){
          ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
          scanf("%d",&n);
          for(i=1;n>i;i++){
              n-=i;
          }
          if(i%2){
              printf("%d/%d",i+1-n,n);
          }
          else{
              printf("%d/%d",n,i+1-n);
          }
          return 0;
      }
      
      
      • 0
        @ 2025-8-16 16:28:36
        #include<bits/stdc++.h>
        using namespace std;
        int n,a=1,b=1;
        int main(){
        	cin>>n;
        	bool q=0;
        	for(int i=1;i<n;i++){
        		if(a==1&&b%2==0){
        			q=0;
        		}else if(b==1&&a%2==0){
        			a++;
        			q=1;
        			continue;
        		}else if(a==1&&b%2==1){
        			b++;
        			q=0;
        			continue;
        		}else if(b==1&&a%2==1){
        			q=1;
        		}
        		if(q==0){
        			a++;
        			b--;
        		}else{
        			a--;
        			b++;
        		}
        		//cout<<i<<' '<<a<<'/'<<b<<endl;
        	}
        	cout<<a<<'/'<<b;
        	return 0;
        }
        
        • -1
          @ 2025-8-25 15:27:34

          看到大家都只写了代码,我叹气啊……

          首先我们来看一下:

          这个Z字表是蛇形,那么它如果旋转成一个三角形,那么它的第 ii 层就有 ii 个项,分母和分子之和为 i+1i+1

          我们可以先用一种巧妙的方法直接求出第 nn 个在第几行。

          while (m<n){
              	s++;
              	m+=s;
            }
          

          再来分析一下:

          • 如果是第奇数行,那么它就是从下开始。
          • 否则,它就是从上开始。 最后遍历一下就可以输出了。

          附上代码:

          #include<bits/stdc++.h>
          
          using namespace std;
          
          int n,m=0,s=0,x,y;
          
          int main()
          {
          	cin>>n;
          	while (m<n){
          		s++;
          		m+=s;
          	}
          	if(s%2==1){
          		x=s;
          		y=1;
          		for(int i=m-s+2;i<=n;i++){
          			x--;
          			y++;
          		}
          		cout<<x<<"/"<<y;
          	}else{
          		x=1;
          		y=s;
          		for(int i=m-s+2;i<=n;i++){
          			x++;
          			y--;
          		}
          		cout<<x<<"/"<<y;
          	}
          	return 0;
          }
          /*
          freopen(".in","r",stdin);
          freopen(".out","w",stdout);
          
          fclose(stdin);
          fclose(stdout);
          */
          
          • 1

          信息

          ID
          5072
          时间
          1000ms
          内存
          128MiB
          难度
          3
          标签
          递交数
          182
          已通过
          130
          上传者