CCF软件能力认证202312-1——仓库规划

问题描述

西西艾弗岛上共有

个仓库,依次编号为 。每个仓库均有一个

维向量的位置编码,用来表示仓库间的物流运转关系。

具体来说,每个仓库

均可能有一个上级仓库 ,满足:仓库 位置编码的每一维均大于仓库 位置编码的对应元素。比如编码为 的仓库可以成为 的上级,但不能成为 的上级。如果有多个仓库均满足该要求,则选取其中编号最小的仓库作为仓库 的上级仓库;如果没有仓库满足条件,则说明仓库

是一个物流中心,没有上级仓库。

现给定

个仓库的位置编码,试计算每个仓库的上级仓库编号。

输入格式

从标准输入读入数据。

输入共

行。

输入的第一行包含两个正整数

,分别表示仓库个数和位置编码的维数。

接下来

行依次输入 个仓库的位置编码。其中第 行()包含 个整数,表示仓库

的位置编码。

输出格式

输出到标准输出。

输出共

行。

行()输出一个整数,表示仓库 的上级仓库编号;如果仓库 没有上级,则第 行输出 。


#include
using namespace std;
int a[1000][1000];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		cin>>a[i][j];
		
	}
	for(int i=1;i<=n;i++)
	{
		bool flag2=false;
		for(int j=1;j<=n;j++)
		{
			bool flag=true;
			if(i==j) continue;
			for(int k=1;k<=m;k++)
			{
				if(a[j][k]>a[i][k])
				{
					continue;
				}
				else 
				{
					flag=false;
					break;
				}
			}
			if(flag)
			{
				flag2=true;
				cout<

讲解:

int a[1000][1000]

这里定义了一个二维数组a,用于存储仓库的位置编码。数组的大小是1000x1000,意味着最多可以有1000个仓库(编号从1到1000),每个仓库的位置编码有1000个维度。 

int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		cin>>a[i][j];
		
	}

 从标准输入读取两个整数nm,分别表示仓库的数量和位置编码的维度数。

读取每个仓库的位置编码,并存储在ma数组中。

for(int i=1; i<=n; i++)  
{  
    bool flag2 = false;  
    for(int j=1; j<=n; j++)  
    {  
        bool flag = true;  
        if(i == j) continue;  
        for(int k=1; k<=m; k++)  
        {  
            if(a[j][k] > a[i][k])  
            {  
                continue;  
            }  
            else   
            {  
                flag = false;  
                break;  
            }  
        }  
        if(flag)  
        {  
            flag2 = true;  
            cout << j << endl;  
            break;  
        }  
    }  
    if(!flag2)  
    {  
        cout << 0 << endl;  
    }  
}

 

在上述代码中,flag 是一个布尔型(bool)变量,用于表示是否找到了满足条件的上级仓库。这里的 flag 实际上是 "flag"(标志)的缩写,用于标记当前检查的仓库 j 是否可能是上级仓库。

具体地说:

如果 flag 保持为 true,则意味着在比较当前仓库 i 和另一个仓库 j 的位置编码时,j 的每一维都大于 i 的对应维。这表示 j 是一个可能的上级仓库。

如果在比较过程中发现任何一维不满足条件(即 j 的某一维不大于 i 的对应维),flag 会被设置为 false,表示 j 不是 i 的上级仓库。

一旦 flag 变为 false,内部循环会立即跳出,并继续检查下一个仓库 j 是否是 i 的上级仓库。如果某个 j 使 flag 保持为 true,则输出 j 作为 i 的上级仓库,并将 flag2(或更好的命名可能是 hasSupervisor,表示是否有上级仓库)设置为 true,表示已经找到了上级仓库。

最后,如果遍历完所有仓库后 flag2(或 hasSupervisor)仍然是 false,则表示没有找到满足条件的上级仓库,因此输出 0

你可能感兴趣的:(算法,c++,动态规划,java,数据结构)