首页 > 代码库 > 1664(新)

1664(新)

#include<iostream>
using namespace std;
int t;
int n;
int a[10]={0}; //panzi chengfang apple number
int sum;
int he=0;
int m;
int data[10][10]={0};
int count=0;
int flag;
int b[10]={0};
int p=0;
int c[20]={0};
int q=0;
int f;
int issafe(int k) 
{   //printf("%d",m); 
	sum=0;
	for(int i=0;i<10;i++)
	{   
		sum=sum+a[i];
	}	
	if(m>=sum+k)
	{		
		return 1;
	}else{
       return 0;
	}
}
void dfs(int step)
{	
	if(step==n)
	{   
		f=1;
		p=0;
		he=0;
        for(int i=0;i<n;i++)
		{ 
			 he=a[i]+he;
		}
		if(he==m)
		{     
			  for(int i=0;i<n;i++)
			  {
				  b[i]=a[i];
			  }
			//for(int j=0;j<n;j++)
				//printf("%d",a[j]);
			    for(int i=0;i<n;i++)
				{
					for(int j=i+1;j<n;j++)
						{
							if(b[i]>b[j])
							{
								int temp=b[i];
								b[i]=b[j];
								b[j]=temp;
							}
					     }
				}
				/*for(int i=0;i<n;i++)
				{
					printf("%d",b[i]);
				}*/
			//	printf("####");
				for(int i=0;i<n;i++)
				{
					p=b[i]+p*10;
					
				}
			//printf("%d",p);
				
				//printf("\n");
				for(int i=0;i<20;i++)
				{
				    if(c[i]==p)
					{   
						f=0;
                        break;
					}
				}
				if(f==1)
				{
					c[q]=p;
					q++;
				}
             
		}
       return;
	}
	
	for(int i=0;i<=m;i++)
	{  /*  if(i==3)
	    printf("xixi");*/
		// printf("%d\n",i);
		
		if(issafe(i))
		{  
			 a[step]=i;
			 dfs(step+1);
			  a[step]=0;
	    }
	}
  
}  
int main()
{    
	  // n panzi
	//scanf("%d",&t);
	//while(t--)
	//{  
		flag=0;
		scanf("%d%d",&m,&n);
		//printf("%d%d",m,n);
		dfs(0);
		for(int j=0;j<20;j++)
		{
			printf("%d  ",c[j]);

		}
		//printf("%d",count);
	//}
	


}

 

1664(新)