poj1840

解方程组算法实现
本文介绍了一种通过使用 map 数据结构和双重及三重循环来解决特定形式的五元三次方程组的方法。该算法首先通过两层循环计算部分方程的结果并将其存储在 map 中,再通过三层循环计算剩余部分并查找 map 中是否存在相应的负值以统计方程的解的数量。

题意:给出ai(i=1~5),求a1 * x1^3+ a2 * x2^3+ a3 * x3^3+ a4 * x4^3+ a5 * x5^3=0在-50到50之间的x的解的个数

分析:用map,二重循环枚举x1,x2计算结果在map中对应位++

三重循环枚举x3,x4,x5计算结看map中对应的相反数的个数。

View Code
#include <iostream>
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
#include
<map>
usingnamespace std;

int a[6];
map
<int, int> h;

int main()
{
//freopen("t.txt", "r", stdin);
for (int i =1; i <6; i++)
scanf(
"%d", &a[i]);
for (int i =-50; i <=50; i++)
for (int j =-50; j <=50; j++)
{
if (i ==0|| j ==0)
continue;
int temp = i * i * i * a[1] + j * j * j * a[2];
if (h.find(temp) == h.end())
h[temp]
=1;
else
h[temp]
++;
}
int ans =0;
for (int i =-50; i <=50; i++)
for (int j =-50; j <=50; j++)
for (int k =-50; k <=50; k++)
{
if (i ==0|| j ==0|| k ==0)
continue;
int temp = i * i * i * a[3] + j * j * j * a[4] + k * k * k
* a[5];
if (h.find(0- temp) == h.end())
continue;
ans
+= h[0- temp];
}
printf(
"%d\n", ans);
return0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值