二维数组
2026-08-14 09:28:37
发布于:江苏
11阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int gfbox[1010][15];//礼盒数组“总价 最高价格 最低价格 ID”
void pr(int n){//矩阵打印
for(int i=1;i<=n;i++) {
for(int j=1;j<=4;j++){
cout<<setw(6)<<gfbox[i][j];
}
cout<<endl;
}
return;
}
void exch(int i,int j){
for(int k=1;k<=4;k++){
swap(gfbox[i][k],gfbox[j][k]);
}
return;
}
int main(){
int n,k;//礼盒数量 礼盒中的商品数
cin>>n>>k;
for(int i=1;i<=n;i++){
int p=0,sp=0,mx=0,mn=9999,id=i;//保存盒子id
for(int j=1;j<=k;j++){//计算每一盒的 总价格 最高价最低价
cin>>p;
sp+=p;//计算总价格
mx=max(mx,p);//保留最高价格
mn=min(mn,p);//保留最低价格
}
gfbox[i][1]=sp;//总价
gfbox[i][2]=mx;//最高价格
gfbox[i][3]=mn;//最低价格
gfbox[i][4]=id;//盒子号码 id
}
//pr(n);//以下开始按总价格大小排序
for(int i=1;i<n;i++){//取第i行
for(int j=i+1;j<=n;j++){//与i+开始比较 找到最小总价格放入第i行
if(gfbox[j][1]<gfbox[i][1]) {//交换i,j行
exch(i,j);
}
}
}
//pr(n);以下在总价格相同的情况下按按最高价格排序
for(int i=1;i<n;i++){//取第i行
for(int j=i+1;j<=n;j++){//与i+开始比较 找到最小总价格放入第i行
if(gfbox[i][1]==gfbox[j][1]) {//交换i,j行
if(gfbox[j][2]<gfbox[i][2]){
exch(i,j);
}
}else{
break;
}
}
}
//pr(n);
for(int i=1;i<n;i++){//取第i行
for(int j=i+1;j<=n;j++){//与i+开始比较 找到最小总价格放入第i行
if(gfbox[i][1]==gfbox[j][1] & gfbox[i][2]==gfbox[j][2]) {//交换i,j行
if(gfbox[j][3]<gfbox[i][3]){
exch(i,j);
}
}else{
break;
}
}
}
for(int i=1;i<n;i++){//取第i行
for(int j=i+1;j<=n;j++){//与i+开始比较 找到最小总价格放入第i行
if(gfbox[i][1]==gfbox[j][1] & gfbox[i][2]==gfbox[j][2]) {//交换i,j行
if(gfbox[j][3]==gfbox[i][3] && gfbox[j][4]<gfbox[i][4]){
exch(i,j);
}
}else{
break;
}
}
}
for(int i=1;i<=n;i++){
cout<<gfbox[i][4]<<' ';
}
//pr(n);//补充一下
return 0;
}
这里空空如也







有帮助,赞一个