1 条题解

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

    C :

    #include <stdio.h>
    #define  N 29
    #define  M 4
    void perms(int p[],int start)
    {
    	int i,t;
    	if(start==M)
    	{
    		if((p[0]<p[1])&&(p[0]<p[2])&&(p[2]<p[3])&&(p[0]*p[0]*p[0]+p[1]*p[1]*p[1]==p[2]*p[2]*p[2]+p[3]*p[3]*p[3]))
    				printf("%d,%d,%d,%d\n",p[0],p[2],p[3],p[1]);
    		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 i,p[N];
    	for(i=0;i<N;i++) p[i]=i+1;//数组赋初值		
    	perms(p,0);//从数组中索引号为0的元素开始进行排列
    	return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<cmath>
    using namespace std;
    #define N 4
    void F(int a[],int start)
    {
    	int i,j,t;
    	if(start==N)
    	{
    		int x=pow(a[0],3);
    		int y=pow(a[1],3);
    		int z=pow(a[2],3);
    		int w=pow(a[3],3);
    		if(a[2]>a[1]&&a[3]>a[2]&&a[1]>a[0]&&((x+y)==(w+z)||(x+z)==(w+y)||(x+w)==(z+y)) ){cout<<a[0]<<','<<a[1]<<','<<a[2]<<','<<a[3]<<endl;}
    		return;
    	}
    	for(i=start;i<30;i++)
    	{
    		
    		swap(a[start],a[i]);
    		F(a,start+1);
    		swap(a[start],a[i]);
    	    
    	  
    	}
    }
    int main()
    {
    	int p[30];
    	int i;
    	for(i=0;i<29;i++)
        	p[i]=i+1;
    	F(p,0);
    	
    	return 0;
    }
    
    • 1

    信息

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