提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本文不同于题目所说的使用向量来求解问题,我们使用平易近人的二维数组。
问题描述
本题主体思路:输入数据→判断仓库 i 的上级仓库→ 记录,输出
(题目找不到,之后补上)
二、问题求解
1.建立模型
首先,将每个仓库设为二维数组的每一行,将每个仓库的的m维向量坐标设为二维数组的每一列,如图:
之后将数组初始化为0(我感觉初不初始化都没什么问题)
自然地得到代码
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>warehou[i][j];
}
}
2.判断仓库i的上级仓库
首先建立一个布尔函数用来判断两个数组的大小关系。
在这里我们建立两个一维数组 t_warehouse[101] 和 tt_warehouse[101]
在该函数中将两个数组在一个 for 循环中进行 m 次比较,每进行一次比较就用 YES和NO两个变量记录。
最后只有 YES=1 且 NO=0 的情况下返回 true .
详细代码如下:
bool yes_no(int m,int t_warehouse[],int tt_wraehouse){
int YES=0,NO=0;
for(int j=1;j<=m;j++){
if(t_warehouse[j]<tt_warehouse[j]
YES=1;
else
NO=1;
}
if(YES==1&&NO==0)
return true;
else
return false;
然后在主函数中先给t_warehouse[ ] 赋值
for(int q=1;q<=n;q++){ //每一次遍历都是将 q 层的仓库与其他的每一个仓库(包括自己)进行大小比对
for(int j=1;j<=n;j++){
t_warehouse[j]=warehouse[q][j];
}
//此处还有代码未列出
}
再设一个ans一维数组用来储存答案,并在每一次关于q的for循环中初始化为1002.
之后就可以开始将第q个仓库与i∈(1…n)的仓库比较。
以题给样例为例可得:
记得每次bool比较完后将数据记录进ans数组
输出说明
由于前面将ans数组初始化为1002,所以设minx=1001
将minx与每一个ans[i]进行比较,如果minx=1001,说明q这个仓库最大是物流中心
否则,就输出q的上级最小仓库。
代码
#include<iostream>
using namespace std;
//布尔函数判断大小关系
bool yes_no(int m, int t_warehouse[], int tt_warehouse[]) {
int yes = 0, no = 0;
for (int j = 1; j <= m; j++) {
if (t_warehouse[j] < tt_warehouse[j])
yes = 1;
else
no= 1;
}
if (yes == 1 && no == 0)
return true;
else
return false;
}
int main()
{
int n, m;//分别为仓库数,维数
cin >> n >> m;
int warehouse[1001][11];//建立仓库的二维数组
//输入
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> warehouse[i][j];
}
}
int tt_warehouse[11], t_warehouse[11],ans[1001];//ans数组用来储存答案
//每一次遍历都是将 q 层的仓库与其他的每一个仓库(包括自己)进行大小比对
for (int q = 1; q <= n; q++) {
//将 q 层的仓库维数额外储存
for (int j = 1; j <= m; j++) {
t_warehouse[j] = warehouse[q][j];
}
//给答案数组赋初值,方便去最小值
for (int i = 1; i <= n; i++) {
ans[i] = 1002;
}
//开始将第q个仓库与i∈(1..n)的仓库比较
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
tt_warehouse[j] = warehouse[i][j];
}
//如果满足则将该仓库编号录入ans数组
if (yes_no(m, t_warehouse, tt_warehouse))
ans[i] = i;
}
int minx = 1001;
//找最小
for (int i = 1; i <= n; i++) {
minx = min(minx, ans[i]);
}
if (minx == 1001)//如果q仓库是物流中心,那么答案数组里全是1002
cout << "0" << endl;
else
cout << minx << endl;
}
return 0;
}
总结
这就是使用二维数组进行解题的方法,当然这题最佳的方法是使用向量。后面我会更新用向量的方法解题。