#include<stdio.h>
typedef struct{
int *a;
int top;
int stacksize;
int incrementsize;
}Stack;
void initStack(Stack &s,int maxsize,int incrementsize);
void Push(Stack &s,int data);
void StackTraverse(Stack &s);
bool Pop(Stack &s,int &e);
bool StackEmpty(Stack &s);
void beibao(int w[],int T,int n);
void main(){
/* Stack s;
initStack(s,5,3);
Push(s,0);
Push(s,1);
Push(s,2);
Push(s,3);
Push(s,4);
StackTraverse(s);
int e=0;
Pop(s,e);
StackTraverse(s);
printf("删除的元素为:%d\n",e);
*/
int w[]={1,4,3,5,2};
beibao(w,5,5);
}
//初始化栈
void initStack(Stack &s,int maxsize,int incrementsize){
s.top=-1;
s.a=new int[maxsize];
s.stacksize=maxsize;
s.incrementsize=incrementsize;
}
//压栈
void Push(Stack &s,int data){
if(s.top==s.stacksize-1){
printf("栈已满!");
}
s.a[++s.top]=data;
}
//遍历栈
void StackTraverse(Stack &s){
for(int i=s.top;i>=0;i--){
printf("%d ",s.a[i]);
}
printf("\n");
}
//弹栈
bool Pop(Stack &s,int &e){
if(s.top==-1){
return false;
}else{
e=s.a[s.top--];
return true;
}
}
//判断栈是否为空
bool StackEmpty(Stack &s){
if(s.top==-1){
return true;
}else{
return false;
}
}
void beibao(int w[],int T,int n){
Stack s;
initStack(s,10,3);
int k=0;
do{
while(T>0 && k<n){
if(T-w[k]>=0){
Push(s,k);
T-=w[k];
}
k++;
}
if(T==0){
StackTraverse(s);
}
Pop(s,k);
T+=w[k];
k++;
}while(!StackEmpty(s) || k<n);
}
phpwind头像附件