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

问题描述

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

解决方案

程序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 输出没有解;

解决方案二:

程序2
[cpp] view plaincopyprint?
template

class Loading{

friend Type MaxLoading(Type [],Type ,int);

private:

void Backtrack(int i);

int n; //集装箱数

Type * w, //集装箱重量数组

c , //第一艘轮船的载重量

cw , //当前载重量

bestw; //当前最优载重量

};

template

void Loading::Backtrack(int i)

{

if(i>n)

{//到达叶子节点

if(cw>bestw) bestw=cw;

return;

}

//搜索子树

if(cw+w[i]<=c)

{//x[i] =1;

cw+=w[i];

Backtrack(i+1);

cw-=w[i];

}

Backtrack(i+1);//x[i]=0;

}

template

Type MaxLoading(Type w[],Type c,int n)

{

Loading X;

X.w = w;

X.c =c;

X.n =n;

X.bestw =0;

X.cw =0;

X.Backtrack(1);

return X.bestw;

}

解决方案三:

程序3
设Z是解空间树第i层上的一个当前扩展结点,curw是当前载重量,maxw是已经得到的最优载重量
#include
#include
using namespace std;

const int N = 1024;
int w[N]; // Weight
int c;
int n;
int curw; // current weight
int maxw; // max weight
int x[N]; // result
int best[N];
int rest;

void Backtrack(int t)
{
if(t>=n)
{
maxw = curw>maxw ? curw : maxw;
for(int i=0; i<n; i++)
best[i] = x[i];
}
else
{
rest -= w[t];

if(curw+w[t] <= c && curw+w[t]+rest > maxw)
{
  x[t] = 1;
  curw += w[t];
  Backtrack(t+1);
  curw -= w[t];
}

if(curw+rest > maxw)
{
  x[t] = 0;
  Backtrack(t+1);
}

rest += w[t];

}
}

int main()
{
maxw = curw = 0;
cin>>c;
cin>>n;
assert(n
for(int i=0; i
{
cin>>w[i];
rest += w[i];
}

Backtrack(0);

cout<<"MaxLoad Weight: "<<maxw<<endl;
for(int i=0; i<n; i++)
{
cout<<best[i]<<" ";
}
cout<<endl;

return 0;
}

解决方案四:

两种不同类型的数据无法比较。
楼主双击错误,跳到错误的那行,然后修改之

时间: 2024-10-28 09:49:06

c++编译错误。怎么办?的相关文章

hello ddk-这个编译错误原因是什么?驱动编译错误

问题描述 这个编译错误原因是什么?驱动编译错误 sources contains a bad line continuation -- backslash followed by a space where a newline was probably intended; this occurs in INCLUDES and therefore the root of your drive may be looked in inappropriately; to do this on purp

编译错误同时存在于不同dll中

asp.net 编译错误类型"同时存在于"不同的dll中. 出现这种错误大概有三种情况: asp.net 编译错误类型"同时存在于"不同的dll中. 出现这种错误大概有三种情况: 1.ASPX页面,一个*.ASPX,对应着一个*.cs文件,两者其实是一个文件,通过两者实现代码分离,每个*.aspx页面都引用着自身的CS文件:如果两个页面引用了相同得.CS文件,在发布得时候也会出现这种错误. 2.估计是在Bin里面还有一个老版本的DLL,而新版的DLL名字换掉了,新的

asp.net教程:编译错误同时存在于不同dll中

asp.net 编译错误类型"同时存在于"不同的dll中. 出现这种错误大概有三种情况: 1.ASPX页面,一个*.ASPX,对应着一个*.cs文件,两者其实是一个文件,通过两者实现代码分离,每个*.aspx页面都引用着自身的CS文件:如果两个页面引用了相同得.CS文件,在发布得时候也会出现这种错误. 2.估计是在Bin里面还有一个老版本的DLL,而新版的DLL名字换掉了,新的覆盖不掉老的,并存在BIN里时,有可能会发生这种情况. 解决方案:把BIN里的手动删掉,C:\WINDOWS\

打开excel收到编译错误:找不到工程或库

用户开Excel时出现此错误,Microsoft Visual Basic,编译错误,找不到工程或库.关闭后,excel才能打开.查了一阵资料,没有找到曾经的案例,于是,静下心来细细分析此case.发现打开的是GWXL97.xla的东东,那就先挖出这个来瞧瞧,搜索后找到2个.尝试更名,再开,不行,问题依旧.好,那我把你删掉呢?没得神气了吧. 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Office/excel/

C++的头文件中类声明后忘记加分号产生不可预期的编译错误

头文件 Test.h 的内容是 class Test { public: virtual void test1(); } 实现文件是 Test.cpp #include "Test.h" #include <iostream> using namespace std; void Test::test1(){ cout<<"Hello"<<endl; } 编译时出现错误 c:\program files\microsoft visu

Word2003“隐含模块中的编译错误:UserAddWord”解决方法

用户在使用Word2003编辑Word文档的过程中,有时会遇到"隐含模块中的编译错误:UserAddWord"的错误提示,可以按照如下方法加以解决: 第1步,在Word2003文档菜单栏依次选择"工具"→"模板和加载项"菜单命令,如图2009012401所示. 图2009012401 选择"模板和加载项"命令 第2步,打开"模板和加载项"对话框,在"模板"选项卡中查看"共用模板

EXCEL隐含模块中的编译错误:设表格式

当您的EXCEL表格出现这样的错误对话框: "EXCEL隐含模块中的编译错误:设表格式"时,可能是由于如下的原因引起的. 一.错误的宏代码 表格中可能引用到宏,要么是宏代码有错误,要么是宏根本就不存在,或者是宏代码中所引用的模块不存在所引起的. 遇到这种情况,最好的办法就是把宏给删除. 方法很简单:按下组合键 Alt + F11 进入VBA窗口,找到ThisWorkBook,接着往下找,就能找到代码了,然后删除. 二.重新设置系统帐户 遇到这种问题,最麻烦的就是重新安装OFFICE也是

android-Android--@color/white编译错误

问题描述 Android--@color/white编译错误 为毛老是编译不通过!!!项目删了重新导入也不行,build project也不行.求指点!!!报错信息:--No resource found that matches the given name (at 'color' with value '@color/white'). 解决方案 你的color.xml下有white这个颜色吗? 解决方案二: 直接android:color=""#FFFFFF""

c++-VS2003升级编译错误LNK1179错误: 重复的 COMDAT“_IID_IDispatchEx&amp;amp;quot;

问题描述 VS2003升级编译错误LNK1179错误: 重复的 COMDAT"_IID_IDispatchEx" 原来的代码在2003下可正常编译,但是由于其他代码都是2010的,为统一调整必须将2003项目升级到2010,问题也就跟着来了,编译无法通过,提示如下出错信息: 1.error LNK1179: 无效或损坏的文件: 重复的 COMDAT"_IID_IDispatchEx" 2._IID_IDispatchEx重复初始化,文件dispeX.h(121) 通