1 条题解

  • 0
    @ 2021-6-15 13:08:37

    C :

    #include <stdio.h>
    #define  N 10
    #define  M 5
    void perms(int p[],int start)
    {
    	int i,t;
    	if(start==M)
    	{
    		if(p[0]&&p[4])
    		{
    			for(i=1;i<N;i++)
    			{
    				if((p[0]*10000+p[1]*1000+p[2]*100+p[3]*10+p[4])*i==(p[4]*10000+p[3]*1000+p[2]*100+p[1]*10+p[0]))
    					printf("%d%d%d%d%d",p[0],p[1],p[2],p[3],p[4]);
    			}
    		}
    		return;
    	}
    	for(i=start;i<N;i++)// 注意i从start开始,不从0开始哦
    	{
    		t=p[i];p[i]=p[start];p[start]=t;//交换
    		perms(p,start+1);//递归
    		t=p[i];p[i]=p[start];p[start]=t;//交换回来
    	}
    }
    int main()
    {
    	int p[N]={0,1,2,3,4,5,6,7,8,9};		
    	perms(p,0);//从数组中索引号为0的元素开始进行排列
    	return 0;
    }
    
    

    C++ :

    #include <stdio.h>
    #define  N 10
    #define  M 5
    void perms(int p[],int start)
    {
    	int i,t;
    	if(start==M)
    	{
    		if(p[0]&&p[4])
    		{
    			for(i=1;i<N;i++)
    			{
    				if((p[0]*10000+p[1]*1000+p[2]*100+p[3]*10+p[4])*i==(p[4]*10000+p[3]*1000+p[2]*100+p[1]*10+p[0]))
    					printf("%d%d%d%d%d",p[0],p[1],p[2],p[3],p[4]);
    			}
    		}
    		return;
    	}
    	for(i=start;i<N;i++)// 注意i从start开始,不从0开始哦
    	{
    		t=p[i];p[i]=p[start];p[start]=t;//交换
    		perms(p,start+1);//递归
    		t=p[i];p[i]=p[start];p[start]=t;//交换回来
    	}
    }
    int main()
    {
    	int p[N]={0,1,2,3,4,5,6,7,8,9};		
    	perms(p,0);//从数组中索引号为0的元素开始进行排列
    	return 0;
    }
    
    
    • 1

    信息

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