1 条题解

  • 0
    @ 2025-10-10 19:52:15

    C++ :

    #include <iostream>
    using namespace std;
    int n,ans=0;
    char a[10];
    int ch()
    {
    	int b[10]={0};
    	int i,sum=0;
    	for(i=0;i<n;i++)
    	b[i]=i+1;
    	for(i=0;i<n-1;i++)
    	{
    		if(a[i-1]==' '&&i!=0&&a[i]==' ')
    		return 0;
    		if(a[i]==' ')
    		{
    			b[i]=b[i]*10+b[i+1];
    			b[i+1]=0; 
    		 } 
    	}
    	
    	sum=b[0];
    	 for(i=0;i<n-1;i++)
    	 {
    	 	if(a[i]=='-')
    		 {
    		 	sum=sum-b[i+1];
    		  } 
    		  else
    		  sum=sum+b[i+1];
    	 }
    	if(sum==0)
    	return 1;
    	return 0;	
    }
    void dfs(int s)
    {
    	int i;
    	if(s==n)
    	{
    		if(ch())
    		{
    			ans++;
    			if(ans%3==1)
    			{
    		
    			for(i=0;i<n-1;i++)
    			{
    				cout<<i+1<<a[i];
    			}
    			cout<<n<<endl; 	}
    		 } 
    	}
    	else
    	{
    		a[s]=' ';
    		dfs(s+1);
    		a[s]='+';
    		dfs(s+1);
    		a[s]='-';
    		dfs(s+1);
    		
    	}
    }
    int main()
    {
    	cin>>n;
    	 dfs(0);
     } 
    

    Pascal :

    var n:integer;
    procedure work;
      var c:array[0..8] of integer;
          s:array[1..9] of longint;
          k,i,p,t:integer;
          sum:longint;
      begin
        fillchar(c,sizeof(c),0);
        while c[0]=0 do
          begin
            fillchar(s,sizeof(s),0);
            k:=1;
            for i:=1 to n-1 do
              begin
                s[k]:=s[k]*10+i;
                if c[i]<>0 then k:=k+1;
              end;
            s[k]:=s[k]*10+n;
            sum:=s[1];
            p:=2;
            for i:=1 to n-1 do
              if c[i]<>0 then
                begin
                  if c[i]=1 then sum:=sum+s[p] else sum:=sum-s[p];
                  p:=p+1;
                end;
            if sum=0 then
              begin
                for i:=1 to n-1 do
                  begin
                    write(i);
                    if c[i]=0 then write(' ');
                    if c[i]=1 then write('+');
                    if c[i]=2 then write('-');
                  end;
                writeln(n);
              end;
            t:=n-1;
            while c[t]=2 do
              begin
                c[t]:=0;
                t:=t-1;
              end;
            c[t]:=c[t]+1;
          end;
      end;
     begin
      readln(n);
      work;
    end.
    

    Java :

    
    import java.util.Scanner;
    
    public class Main {
    	public static int n;
    	public static int shulie[];
    	public static char fuhao[];
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner in=new Scanner(System.in);
    		n=in.nextInt();
    		shulie=new int[n];
    		fuhao=new char[n-1];
    		for(int i=0;i<n;i++){
    			shulie[i]=i+1;
    		}
    		
    		dfs(0);
    	}
    	
    	public static void dfs(int k){
    		if(k==n-1){
    			for(int i=0;i<n-1;i++){
    				if(fuhao[i]==' '){
    					for(int j=i;j>=0;j--){
    						if(shulie[j]!=0){
    							shulie[j]=shulie[j]*10+shulie[i+1];
    							shulie[i+1]=0;
    							break;
    						}
    					}
    					
    				}
    			}
    			for(int i=0;i<n-1;i++){
    				if(fuhao[i]=='+'){
    					shulie[i+1]=shulie[i]+shulie[i+1];
    				}
    				else if(fuhao[i]=='-'){
    					shulie[i+1]=shulie[i]-shulie[i+1];
    				}
    				else if(fuhao[i]==' '){
    					shulie[i+1]=shulie[i];
    				}
    			}
    			if(shulie[n-1]==0){
    				for(int i=0;i<n;i++){
    					shulie[i]=i+1;
    				}
    				for(int i=0;i<n-1;i++){
    					System.out.print(shulie[i]+""+fuhao[i]);
    				}
    				System.out.println(shulie[n-1]);
    			}
    			else{
    				for(int i=0;i<n;i++){
    					shulie[i]=i+1;
    				}
    			}
    			return;
    		}
    		
    		fuhao[k]=' ';
    		dfs(k+1);
    		fuhao[k]='+';
    		dfs(k+1);		
    		fuhao[k]='-';
    		dfs(k+1);
    			
    		
    	}
    
    }
    
    • 1

    信息

    ID
    1043
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者