6 条题解

  • 3
    @ 2023-11-9 23:23:40
    #include<iostream>
    using namespace std;
    int main()
    {
        int m,n;
        cin >> m;
        int a[10]={0};
            a[0]=1;
            a[1]=2;
            a[2]=2*3;
            a[3]=2*3*4;
            a[4]=2*3*4*5;
            a[5]=2*3*4*5*6;
            a[6]=2*3*4*5*6*7;
            a[7]=2*3*4*5*6*7*8;
            a[8]=2*3*4*5*6*7*8*9;
        while(m--)
        {
            cin >> n; 
            for(int i = 8 ; i >= 0 ; i--)
            {
                if(n-a[i]>=0) n=n-a[i];
                else continue;
            }
            if(n == 0)
            {
                cout << "Yes" << endl;
            }
            else 
            {
                cout << "No" << endl;
            }
        }
        return 0;
    }
    
    • @ 2023-11-9 23:38:26

      大佬🎉️

    • @ 2023-11-29 19:56:40

      佬,好解法

    • @ 2024-10-16 20:04:28

      天才

    • @ 2024-12-10 0:18:20

    • @ 2025-10-11 15:44:32

      @[](/user/42👍 72)

  • 2
    @ 2025-11-7 13:16:14
    #include <iostream>
    using namespace std;
    int main() {
    	int t;
    	cin >> t;
    	while (t--) {
    		int n;
    		cin >> n;
    		int sum = 0;
    		int flag = 0;
    		int m;
    		for (int i = 10; i >= 1; i--) {
    			m = 1;
    			for (int j = 1; j <= i; j++) {
    				m *= j;
    			}
    			if (m > n) continue;
    			sum += m;
    			if (sum == n) {
    				flag = 1;
    				break;
    			} else if (sum > n) {
    				sum -= m;
    			}
    		}
    		if (flag == 1) {
    			cout << "Yes" << endl;
    		} else {
    			cout << "No" << endl;
    		}
    	}
    	return 0;
    }
    
    • @ 2025-11-7 13:21:03

      题目中有限制n范围,从高阶层往下遍历,阶层和大于n返回,重新向下寻找,和等于一标记flag等于1

  • 1
    @ 2025-11-13 16:05:24
    #include<stdio.h>
    int main(){
        int n;
        scanf("%d",&n);
        while(n--){
            int m,i,s=1,a[10]={0};
            scanf("%d",&m);
            for(i=1;i<=9;i++){
                s*=i;
                a[i]=s;
            }
            for(i=9;i>=1;i--){
                if(m-a[i]>=0){m=m-a[i];}
                else continue;
            }
            if(m==0)printf("Yes\n");
            else printf("No\n");
        }
    }
    
    • 0
      @ 2023-10-10 21:17:21
      #include<iostream>
      using namespace std;
      #include<stdio.h>
      int a[13];
      int init()
      {
          a[1]=1;
          a[2]=2;
          a[3]=6;
          int i;
          for(i=4;i<=13;i++)
          {
              a[i]=a[i-1]*i;
             // a[i-1]+=a[i-2];
          }
      }
      int juge(int n,int w
               )
      {
          if(n==0) return 0;
          int n1=n;
          int i;
          for(int i=1;i<w;i++)
          {
              if(n>=a[i]&&n<a[i+1])
              {
                  if(juge(n-a[i],i)==0)
                       return 0;
              }
          }
          return 1;
       
       
      }
      int main()
      {
       
          int t;
          init();
          scanf("%d",&t);
          while(t--)
          {
       
              int n;
              scanf("%d",&n);
              if(juge(n,13)==0)
              {
                  printf("Yes\n");
              }
              else
              {
                  printf("No\n");
              }
          }
      }
       
      
      • 0
        @ 2023-10-7 23:00:12
        #include<stdio.h>
        int main(){
            int n,m;
            scanf("%d",&n);
            while(n--)
            {
                int a[9]={1,2,6,24,120,720,5040,40320,362880};//分别求出1~9的阶乘,存入数组中。
                scanf("%d",&m);输入m.
                int t=0,i;t用来判断是否为阶乘之和数,1表示是阶乘之和数,0表示不是阶乘之和数。
                for(i=8;i>=0;i--)
                {
                    if(m>=a[i])
                    {
                        m-=a[i];
                    }由小到大遍历数组,如果m大于其中一个元素,那就减去这个元素。
                    if(m==0)
                    {
                        t=1;
                        break;
                    }如果最后m减完结果为0,就为阶乘之和数。
                }
                if(t==1)
                {
                    printf("Yes\n");
                }
                else
                {
                    printf("No\n");
                }
            }
            return 0;
        }
        
        • 0
          @ 2023-9-24 21:39:16
          #include<stdio.h>
          int jiecheng(int x){
              int result=1;
              for(int i=1;i<=x;i++){
                  result*=i;
              }
              return result;
          }
          
          int main(){
              int m;
              scanf("%d",&m);
              while(m--){
                  int n;
                  scanf("%d",&n);
                  int flag=0;
                  for(int i=9;i>=1;i--){
                      if(n-jiecheng(i)!=0&&n>jiecheng(i)){
                          n=n-jiecheng(i);
                      }else if(n-jiecheng(i)==0){
                          flag=1;
                          break;
                      }
                  }
                 if(flag==0) printf("No\n");
                 else printf("Yes\n");
              }
              return 0;
          }
          
          
          
          • 1

          信息

          ID
          157
          时间
          3000ms
          内存
          128MiB
          难度
          8
          标签
          (无)
          递交数
          1348
          已通过
          231
          上传者