题目描述
小T作为班级的班长,承担着班级的各项事务,今天班主任交给了小T一个重要的任务,学校的知识竞赛就要开始了,要小T代表班级去参加,今天这场是快速解应用题,小明今天去商店购买东西,小明购买的东西有3样,第一件是矿泉水,矿泉水一块钱一瓶,第二件是烤肠,烤肠三块钱一根,第三件是方便面,方便面是五块钱一碗,小明带了块钱,他一定会花光身上所有的钱去购买这些东西,但是买的方案有很多,小明只有一个要求,那就是三件物品的数量之和要为,现在小明想知道有多少种可能的购买方案数量,以及这些方案中每件物品究竟是买多少件,裁判会给出和要求你尽快给出答案,小T才小学一年级,还算不过来,需要你给他写代码计算
输入格式
第一行一个整数,表示三件物品的数量之和。
第二行一个整数,表示小明带的钱数。
输出格式
第一行一个数字表示总的方案数,接下来若干行,每行表示一种方案,用空格隔开的三个整数分别表示矿泉水、烤肠和方便面的数量,这里先按照矿泉水的数量由小到大输出,如果矿泉水的数量相同,则按烤肠的数量由小到大输出,如果烤肠的数量相同,则按方便面的数量由小到大输出。
如果不存在这样的方案,则第一行输出-1。
输入样例 #1
3
9
输出样例 #1
1
0 3 0
1 1 1
#include<bits/stdc++.h>
using namespace std;
struct ws{
int a,b,c;
}q[100005];
bool cmp(ws l,ws d){
if(l.a<d.a)return true;
else if(l.a>d.a)return false;
else if(l.a==d.a){
if(l.b<d.b)return true;
else if(l.b>d.b)return false;
else if(l.b==d.b){
if(l.c<d.c)return true;
else if(l.c>d.c)return false;
}
}
}
int main(){
bool aw=true;
int w=1;
int n,m;
cin>>n>>m;
for(int i = 0;i<=n;i++){
for(int j = 0;j<=n-i;j++){
for(int z = 0;z<=n-i-j;z++){
if(i+j+z==n && i+j3+z5==m){
aw=false;
q[w].a=i;
q[w].b=j;
q[w].c=z;
w++;
}
}
}
}
if(aw)cout<<-1;
sort(q+1,q+w,cmp);
for(int i = 1;i<w;i++){
cout<<q.a<<" "<<q.b<<" "<<q.c<<endl;
}
}
我代码错哪了?急