满足a^3 + b^3 = c^3 + d^3的abcd组合

本文探讨了小于30的正整数解的立方方程 a^3 + b^3 = c^3 + d^3 的解决方案,并提供了编程代码来寻找所有不同的解。
部署运行你感兴趣的模型镜像

 

考虑方程式:a^3 + b^3 = c^3 + d^3

其中:"^"表示乘方。a、b、c、d是互不相同的小于30的正整数。

这个方程有很多解。比如:

a = 1,b=12,c=9,d=10 就是一个解。因为:1的立方加12的立方等于1729,而9的立方加10的立方也等于1729。

当然,a=12,b=1,c=9,d=10 显然也是解。

如果不计abcd交换次序的情况,这算同一个解。

你的任务是:找到所有小于30的不同的正整数解。把a b c d按从小到大排列,用逗号分隔,每个解占用1行。比如,刚才的解输出为:

1,9,10,12

不同解间的顺序可以不考虑。

 

程序代码

#include<iostream>

using namespace std;

typedef struct node
{
	int data[4];
	struct node *next;
}node,*nodep;

int arr[30];

void fang();
void sort(int a[],int n);
int main()
{
	fang();
	nodep head,p,q;
	head = new(node); //用于存放数据的链表头结点
	head->next = NULL;
	q = head;
	for(int i = 1;i <=29; ++i)
	{
		for(int j = 1;j <=29; ++j)
		{
			if(i == j) continue;	//防止同一组数据中出现重复数据
			for(int k = 1;k <=29; ++k)
			{
				if(i == k || j == k) continue;	//防止同一组数据中出现重复数据
				for(int l = 1;l <=29; ++l)
				{
					if(i == l || j == l || k == l) continue;	//防止同一组数据中出现重复数据
					
					if((arr[i] + arr[j]) == (arr[k] +arr[l]))
					{
						int flag = 0;	//判断是否结束本次循环的标志

						p = new(node);
						p->data[0] = i;
						p->data[1] = j;
						p->data[2] = k;
						p->data[3] = l;
						sort(p->data,4);

						nodep px = head;
						while(px)
						{	
							int m;
							//判断新结点中的数据是否与已存在的数据重复
							for(m = 0;m < 4; ++m)
							{
								if(px->data[m] != p->data[m]) break;
							}
							//当新结点中的数据与已存在的数据重复时将结束标志置为1,并结束while循环
							if(4 == m)
							{
								flag = 1;
								break;
							}
							//否则指针后移
							else px = px->next;
						}
						if(flag)
						{
							//结束标志为1时,即新结点中的数据与已存在的数据重复时,释放新结点,并结束本次循环
							delete(p);
							continue;
						}
						//将新结点连接到链表中
						p->next = NULL;
						q->next = p;
						q = p;
						//输出找到的组合
						for(int n = 0;n < 3; ++n)
						{
							cout<<p->data[n]<<",";
						}
						cout<<p->data[3]<<endl;
					}
				}
			}
		}
	}
	return 0;
}

//求1~29的3三次方,并将结果存放在arr[]数组中
void fang()
{
	arr[0] = 0;
	for(int i = 1;i <= 29; ++i)
	{
		arr[i] = i * i * i;
	}
}

//将数组array中的元素按从小到大的顺序排序
void sort(int array[],int n)
{
	int k;
	int temp;
	for(int i = 0;i < n - 1; ++i)
	{
		k = i;
		for(int j =	i + 1;j < n;++j)
		{
			if(array[k] > array[j]) k = j;
		}
		temp = array[k];
		array[k] = array[i];
		array[i] = temp;
	}
}


 

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值