1 条题解

  • 0
    @ 2025-4-12 21:33:54

    C :

    #include<stdio.h>
    #include<stdlib.h>
    int a[20]={1};
    int n,tot=0;
    void out(int i){
         int j;
         printf("%d=",n);
         for(j=1;j<i;j++)
             printf("%d+",a[j]);
         printf("%d\n",a[i]);
    }
    
    void search(int i,int s){
         int j;
         for(j=a[i-1];j<=s;j++)
            if(j<n) {
              a[i]=j;
              s-=j;
              if(s==0){
    		  out(i);
    		  tot++;
    		  }
              else search(i+1,s);
              s+=j;
              }
    }
    
    int main(){
        scanf("%d",&n);
        search(1,n);
        printf("%d",tot);
    
    }
    

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cstdlib>
    
    using namespace std;
    
    int a[10001]={1},n,total;
    int search(int,int);
    int print(int);
    int main()
    {
    	cin >> n;
    	
    	search(n,1);
    	
    	cout << total;
    	
    	return 0;
    }
    int search(int s,int t)
    {
    	int i;
    	for(i=a[t-1];i<=s;i++)
    	 if(i<n)
    	 {
    	 	a[t]=i;
    	 	s-=i;
    	 	if(s==0)print(t);
    	 	else search(s,t+1);
    	 	s+=i;
    	 }
    }
    int print(int t)
    {
    	cout << n << "=";
    	
    	for(int i=1;i<=t-1;++i)
    	  cout << a[i] << "+";
    	 cout << a[t] <<endl;
    	
    	total++;
    }
    
    • 1

    信息

    ID
    780
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者