#include
#include
using namespace std;
bool ifUsed[100];
int a[4];
int pow3(int n)
{
return n*n*n;
}
int position(int p)
{
int iCount=1;
for(int q=0;q<4;++q)
if(a[q] iCount++;
return iCount;
}
void findAnswer(int cur)
{
if(cur==4)
{
if((pow3(a[0])+pow3(a[1])==pow3(a[2])+pow3(a[3])))
{
for(int i=1;i<=4;++i)
for(int j=0;j<4;++j)
if(position(j)==i)
cout<
return;
}
else
{
for(int k=1;k<30;++k)
{
if(!ifUsed[k])
{
a[cur]=k;
ifUsed[k]=1;
findAnswer(cur+1);
ifUsed[k]=0;
}
}
}
}
int main()
{
memset(a,0,sizeof(a));
memset(ifUsed,0,sizeof(ifUsed));
findAnswer(0);
system("pause");
return 0;
}
回溯算法,相信你能看懂的!如果有不懂的,随时baidu Hi我。
18.编写程序,实现矩阵(3行3列)的转置(即行列互换)。 19.编写函数fun,该合并的方式是:将a数的十位和个位依次放在c数的千位和十位上,b数的十位
#include
main()
{
int a,b,c,d,s[4]={0,0,0,0},i,j,t,flag=0;
for(a=0;a<30;a++) //A的取值不大于30
{
for(b=0;b<30;b++) //B的取值不大于30
{
for(c=0;c<30;c++) //C的取值不大于30
{
for(d=0;d<30;d++) //D的取值不大于30
if((a*a*a+b*b*b==c*c*c+d*d*d)&&a!=b&&b!=c&&c!=d&&a!=c&&a!=d&&b!=d)
//判断a^3+b^3=c^3+d^3,A,b,c,d是否小于30,是否不同的正整数
{
s[1]=a;
s[2]=b;
s[3]=c;
s[4]=d;
}
for(i=0;i<3;i++) //排序
{
for(j=0;j<3-i;j++)
if(s[j] {
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
for(i=0;i<4;i++) //输出
printf("%3d",s[i]);
printf("\t");
flag++;
if(flag==3) //控制一行输出个数
{
flag=0;
printf("\n");
}
}
}
}
}