唐朝的李白 2016-05-13 15:08 采纳率: 44.4%
浏览 1418
已采纳

c++编译错误。怎么办?

/*描述:有一批共n个集装箱要装上两艘载重量分别为c1和c2的轮船,其中,集装箱i的重量为wi,且
集装箱重量总和小于等于两辆轮船的载重量总和。
装在问提要求确定是否存在一个方案可将这n个集装箱装上两艘轮船。
若有,找出一种装在方案。

解决方法:(1)首先将第一艘轮船极可能装满
(2)将其余的集装箱装载第二艘轮船

    装载第一艘轮船的方法等价于一个特殊的0-1背包问题

*/
#include

using namespace std;

int c1[100], c2[100];//两艘轮船的载重量
int n[100];//集装箱个数
int w[1000];//每个集装箱的重量
int bestw = 0;//记录当前第一搜轮船装载的最大值
int a[1000];//记录每个集装箱是否被装进第一搜轮船

//插入排序
void InsertSort(int A[], int N)
{
int j, p;
int tmp;

for(p = 1; p < N; p++) {
    tmp = A[p];
    for(j = p; j > 0 && A[j - 1] > A[j]; j--) {
        A[j] = A[j - 1];
    }

    A[j] = tmp;
}

}

void search(int m)
{
if(m >= n)//这里提示有问题
return;
else {
if(w[m] <= c1 - bestw)//这里提示有问题
{
a[m] = 1;
bestw = bestw + w[m];
}

    else a[m] = 0;

    search(m + 1);
}

}

//判断函数
bool outp(int c1, int C2, int N)
{
int i;
//对集装箱的重量进行插入排序
InsertSort(w, N);

//将将第一个集装箱尽可能装满
search(0);

int wz = 0;//集装箱总重量
for(i = 0; i < N; i++) {
    wz = wz + w[i];
}
//做出判断
if(C2 >= wz - bestw)
    return true;
else
    return false;

}

int main()
{
int i = -1, j;
do {
i++;
cin >> c1[i] >> c2[i] >> n[i];//输入载重量和集装箱的个数
int i;//循环变量
for(j = 0; j < n[i]; j++) {
//输入每个集装箱的重量
cin >> w[i];
}
}while(c1[i] || c2[i] || n[i]);

int tmp = i;

for(i =  0; i < tmp; i++) {
    if(outp(c1[i], c2[i], n[i]))
        cout << "Yes" << endl;
    else cout << "No" << endl;
}
return 0;

}


编译提示
error: ISO C++ forbids comparison between pointer and integer

  • 写回答

4条回答

  • yy611653 2016-05-14 00:17
    关注

    程序1
    Input:n个集装箱,及其重量wi;两艘轮船的载重量C1,C2。
    Output:一种装载方案,没有输出没有解。

    1. 设定目标函数的限界down=w1,up= n iiw1 ,flag=false(标记是否找到解)

    2. 计算初始结点1的f(1)=up和g(1)=0,将初始结点插入最大堆H,堆中存储f值为结点键值;

    3. while (H ≠Φ)

    4. {

    5. 从H中做DELETEMAX的操作,用p带回相应结点;
    6. If g(p)<=C1 and up-g(p)<=C2 then

    7. 沿parent指针输出装入第一艘轮船的集装箱, 剩余装入第二艘轮船,flag=true,exit (结束程序);

    8. Else if g(p)<=C1 and up-g(p)>C2

    9. { if p为叶子结点 then

    10. if 堆H为空then 输出没有解, exit (结束程序);

    11. else if f(p)>down then down=f(p), 删除H中小于等于down的结点;
    12. else

    13. { 产生p满足约束条件的后继结点d(建树,保留结点的parent指针) 并计算f(d)和g(d)

    14. 将f值大于down的结点插入最大堆H中;}
    15. }
    16. }

    17. if flag=false then 输出没有解;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?