11 条题解

  • 2
    @ 2024-9-26 6:57:08

    #include<stdio.h>//笨蛋思维? int main(){ int n,a,i; scanf("%d",&n); while(n--){ int m,t=0; scanf("%d",&a); for(i=1;i<=a;i++){ t+=i;//来确定这个数在哪一行 m=i;//m代表第几行 if(t>=a){ break;

    } } if(m%20){//分奇数偶数行 if(ta){ printf("%d/1\n",m); } else{printf("%d/%d\n",a-t+m,t-a+1);}//比较抽象,想了很久。具体看题目给的图,找找规律 } else{ if(ta){ printf("1/%d\n",m);} else{printf("%d/%d\n",t-a+1,a-t+m);}//看清楚ta这种情况,这个比较容易漏。

    } }

    //就结束了?

    return 0; }

    • 1
      @ 2024-12-10 15:52:36

      #include<stdio.h>

      int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int sum = 0, ans = 1; int m=n; for (int k = 1; k <= 100000; k++) { if (sum+k < n) { sum += k; ans=k+1; m=m-k; } } if(ans%2==0){ printf("%d/%d\n",m,ans-m+1); } else{ printf("%d/%d\n",ans-m+1,m); } } return 0; }

      • @ 2024-12-10 15:53:00

        思路简单

    • 1
      @ 2024-11-1 15:23:39

      #include <stdio.h>

      int main()

      {

      int m;

      scanf("%d",&m);

      while(m--){

      int N;

      scanf("%d",&N);

      int ha=1,le=1;

      int n=1;

      int m=0;

      while(1){

      m+=n;

      if(n%2==1){

      int q=m;

      for(int i=1;i<=n;i++){

      le=n-i+1;

      ha=i;

      if(q==N){

      m=q;

      break;

      }

      q--;

      }

      }else{

      int q=m;

      for(int i=1;i<=n;i++){

      ha=n-i+1;

      le=i;

      if(q==N){

      m=q;

      break;

      }

      q--;

      }

      }

      n++;

      if(m==N){

      break;

      }

      }

      printf("%d/%d\n",ha,le);

      }

      return 0;

      }

      • 1
        @ 2023-11-30 21:20:48
        int m, n,bz,i,j,w;
        int main(void) {
        	scanf("%d", &m);
        	while (m--) {
        		bz = 1;
        		w = 0;
        		scanf("%d",&n);
        		for ( i = 1; n>0 ;i++){
        			n = n - i;
        			bz++;
        		}
        		bz--;
        		if (n < 0) {
        			w = n + i - 1;
        		}
        		else if (n == 0) {
        			w = i-1;
        		}
        		//printf("%d %d", bz, w);
        		if (bz % 2 == 0) {
        			printf("%d/%d\n", w, (bz + 1 - w));
        		}
        		else {
        			printf("%d/%d\n", (bz + 1 - w), w);
        		}
        	}
        }
        
        • 0
          @ 2025-8-20 17:32:37

          来个单次评测O(1)的极简解法😋

          这些像杨辉三角的都可以解方程😀

          1. 运用求根公式解二次方程
          2. 经过适当的floor, ceil得到层数
          3. 可以发现题目中给的是”S形走位“,可以联想到奇数行或偶数行翻转(倒序输出)
          4. 每行的和固定,求出cnt(行中第几个)即可表示
          from math import sqrt,ceil,gcd,log;re=lambda:map(int,input().split())
          t, = re()
          for _ in range(t):
              n, = re()
              a = ceil((sqrt(1 + 8 * n) - 1) / 2) - 1
              cnt = n - a * (a + 1) // 2
              b = a + 2 - cnt
              print(f"{cnt}/{b}" if a & 1 else f"{b}/{cnt}")
          
          • 0
            @ 2024-11-27 17:36:41

            #include<stdio.h> int main() { int m,n; scanf("%d",&m); while(m--) { scanf("%d",&n); int i=n; int j=1; while(i>j) { i=i-j; j++; } if(j%20) { printf("%d/%d\n",i,j-i+1); } if(j%21) { printf("%d/%d\n",j-i+1,i); } } }

            1 11

            3 12 21

            6 31 22 13

            10 14 23 32 41

            15 51 42 33 24 15

            21 16 25 34 43 52 61

            28 71 62 53 4435 26 17

            36 18 27 3645 54 63 72 81

            45 91 82 73 64 55 46 37 28 19

            列举:第一列写的是到本行为止有多少个数(每行都从左开始数)

            可以观察到每行个数+1, 所以输入的数只需要递减遍历,当i=i-j < j,即该数在第j行; 再观察奇偶的区别输出即可。

            • 0
              @ 2024-9-24 11:53:06

              #include <stdio.h>

              int main() {
                  int m, N, n, num, den, k;
                  scanf("%d", &m); // 读取测试数据组数
              
                  for (int i = 0; i < m; i++) {
                      scanf("%d", &N); // 读取每组的N值
              
                      // 计算分数的位置
                      n = 1; // 行数
                      k = 0; // 当前编号的索引
              
                      while (1) {
                          // 当前对角线的元素数量
                          k += n;
              
                          if (k >= N) {
                              // 找到对应的行和列
                              int position = N - (k - n); // 位置在当前对角线
                              if (n % 2 == 0) {
                                  // 偶数行,分母递增,分子递减
                                  num = position;
                                  den = n + 1 - position;
                              } else {
                                  // 奇数行,分子递增,分母递减
                                  num = n + 1 - position;
                                  den = position;
                              }
                              break;
                          }
                          n++; // 移动到下一行
                      }
                      
                      // 输出结果
                      printf("%d/%d\n", num, den);
                  }
              }
              
              • 0
                @ 2023-12-13 18:21:57

                #include <stdio.h> int main() { int m; scanf("%d",&m); while(m--) { int n,t,a,b; scanf("%d",&n); int i=1; while(i*(i+1)<2n) { i++;//如果该项大于所编码的数量 } //此时的i表示该项所在的位数 i--;//为了求t i--后的 (ii+1)/2表示该项次数前面编码的数量 t=n-(i*(i+1)/2);//t表示第n项在第i次中站的位置的位数 if((i+1)%2==0) { a=t; b=(i+1)-(t-1); } else { a=(i+1)-(t-1); b=t; } printf("%d/%d\n",a,b);

                } return 0;

                }

                • 0
                  @ 2023-10-19 20:51:21

                  还是有点意思的找规律问题

                  #include<iostream>
                  using namespace std;
                  int main()
                  {
                      int m;
                      cin >> m;
                      while(m--)
                      {
                          int m;
                          cin >> m;
                          int sum = 0,num = 0,k = 0;
                          for(int i = 1 ; i < 1000 ; i++)
                          {
                              sum += i;
                              num += i-1;
                              if(m >= num&&m <= sum)
                              {
                                  k = i;
                                  break;
                              }
                          }
                          int cnt = m - num;
                          int fm,fz;
                          if(k % 2 == 1)
                          {
                              for(int i = k , j = 1 ; ; i-- , j++)
                              {
                                  if(j == cnt)
                                  {
                                      fz = i;
                                      fm = j;
                                      break;
                                  }   
                              }
                          }
                          else if(k % 2 == 0)
                          {
                              for(int i = 1 ,j = k ; ; i++ , j--)
                              {
                                  if(i == cnt)
                                  {
                                      fz = i;
                                      fm = j;
                                      break;
                                  }
                              }
                          }
                          cout << fz << "/" << fm << endl;
                      }
                      return 0;
                  }
                  
                  
                  • 0
                    @ 2023-10-4 11:09:22
                    将这些数分成几行(斜着 如1行只有 1 1 2行有 1 2
                    
                    和 2 1)然后计算出在第几行,最后分成奇偶情况
                    
                    讨论,很容易就能找出规律
                    ```#include<stdio.h>
                    int main()
                    {
                    	int m;
                    	scanf("%d",&m);
                    	while(m--)
                    	{
                    		int n;
                    		scanf("%d",&n);
                    		int sum=0;
                    		int d1=1;
                    		int i;
                    		while(sum<n)
                    		{
                    			for(i=1;i<=d1;i++)
                    			{
                    				sum++;
                    				if(sum==n)
                    				break;
                    			}
                    			if(sum<n)
                    			{
                    				d1++;
                    			}
                    		}
                    		if(d1%2==0)
                    		printf("%d/%d\n",i,d1-i+1);
                    		else
                    		printf("%d/%d\n",d1-i+1,i);
                    	}
                    }
                    ``````
                    `````````
                    ````````````
                    ```````````````
                    ``````````````````
                    `````````````````````
                    ````````````````````````
                    ```````````````````````````
                    ``````````````````````````````
                    `````````````````````````````````
                    
                    • 0
                      @ 2023-9-26 21:18:25

                      题目难度为2的题?

                      #include<stdio.h>
                      int number1[1000];
                      int main()
                      {
                          int n,m,j,k,t;
                          int i=1,sum=0;
                          while(1)
                          {
                              sum=sum+i;
                              number1[i]=sum;
                              i++;
                              if(sum>100000)
                                  break;
                          }
                          scanf("%d",&m);
                          while(m--)
                          {
                              scanf("%d",&n);
                              for(j=1;j<i;j++)
                              {
                                  if(n<=number1[j])
                                  {
                                      t=j;
                                      break;
                                  }
                              }
                              if(t%2!=0)
                              {
                                  if((number1[j]-n)==(n-number1[j-1]-1))
                                      printf("%d/%d\n",(t+1)/2,(t+1)/2);
                                  if((number1[j]-n)<(n-number1[j-1]-1))
                                  {
                                      int z=t-(number1[j]-n);
                                      int y=number1[j]-n+1;
                                      printf("%d/%d\n",y,z);
                                  }
                                  if((number1[j]-n)>(n-number1[j-1]-1))
                                  {
                                      int z=t-(number1[j]-n);
                                      int y=number1[j]-n+1;
                                      printf("%d/%d\n",y,z);
                                  }
                              }
                              if(t%2==0)
                              {
                                  if((number1[j]-n)<(n-number1[j-1]-1))
                                  {
                                      int z=t-(number1[j]-n);
                                      int y=number1[j]-n+1;
                                      printf("%d/%d\n",z,y);
                                  }
                                  if((number1[j]-n)>(n-number1[j-1]-1))
                                  {
                                      int z=t-(number1[j]-n);
                                      int y=number1[j]-n+1;
                                      printf("%d/%d\n",z,y);
                                  }
                              }
                          }
                          return 0;
                      }
                      
                      • 1

                      信息

                      ID
                      155
                      时间
                      3000ms
                      内存
                      128MiB
                      难度
                      3
                      标签
                      (无)
                      递交数
                      366
                      已通过
                      194
                      上传者