求教这段代码为什么“答案错误”

Tony5t4rk 2017-12-06 01:03:44

#include <iostream>
int main()
{
using namespace std;
int n,*a,i = 0,sum=0,*d,e,f,*h;
cin >> n; // 输入开始的宝石数量n
e=n;
a = new int[n]; // 定义a数组以保存每个宝石蕴含的能量
d = new int[n]; // 定义d数组用以计算每种取法所得到的能量和
h = new int[n]; // 定义h数组用来在计算每种不同取法的循环开始时为a数组赋原值
for (int j = 0; j < n; ++j)
{
d[j] = 0;
} // 为保存结果数组赋值
for (; i < n; ++i)
{
cin >> a[i];
sum += a[i];
} // 输入每个宝石蕴含的能量数组并求和
for (int j = 0; j < n; ++j)
{
h[j] = a[j];
} // 为h数组中每个元素赋相应a数组中的值
//cout << "sum=" << sum << endl;
int b = 1000; // b用来判断最小值
for (int j = 3; j <= ((n+1)/2); ++j)
{
if (n%j==0) // 保留n的因数个宝石才能组成正多边形
{
//cout << "j=" << j << endl;
for (int z = 0; z < n; ++z)
{
a[z] = h[z];
} // 在每次循环开始前为a数组赋其原值
d[j] = sum;
for (int k = 0; k < j; ++k)
{
for (int l = 0; l < e; ++l)
{
if (a[l] < b)
{
b = a[l];
f=l;
} // 判断a数组中的最小值并赋值给b
}
d[j] =d[j] - b; // 在宝石蕴含的能量和中减去最小值b
//cout << "b=" << b << endl << "d[" << j << "]=" << d[j] << endl;
for (int l = f; l < e; l++)
{
a[l] = a[l+1]; // 在数组中去除已减过的最小值数据
//cout << "a[" << l << "]=" << a[l] << endl;
}
e--;
b = 1000;
}
}
}
int c = 0;
for (int g = 3; g <= ((n+1)/2); ++g)
{
if (d[g] > c)
{
c = d[g];
}
} // 计算并输出d数组中的最大值
cout << c;
return 0;
}
...全文
330 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2017-12-08
  • 打赏
  • 举报
回复
去掉宝石后,可不可以移动其他宝石的位置??
自信男孩 2017-12-06
  • 打赏
  • 举报
回复
将能量从大大小排序,然后从第一个开始列入正n边型,遇到负值(小于0的值)停止,然后看一下大于0的是否可以组成正n边型。如果不可以组成正n边型,让最后一个正直和后面的负值比较,若正值大于负值(绝对值)则算上负值,否则用前一个正值。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧