前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做题总结—— Latin Squares

做题总结—— Latin Squares

作者头像
用户8224910
发布2021-01-26 15:32:02
5080
发布2021-01-26 15:32:02
举报
文章被收录于专栏:个人学习总结个人学习总结

做题总结—— Latin Squares

原题

题目截图
题目截图
题目样例
题目样例

题意分析:

题目就是输入一个二维数组(用来表示矩阵),判断对于矩阵中的每一个数字是否在该数字所在的行、所在的列的只出现一次(相当于数独的概念)。如果是的话,则该矩阵是拉丁方,再判断矩阵的第一行、第一列的元素是否按照升序的方式排列的,从而进行对应的判断输出

做题思路:

  • 由于输入数据中含有字符,所以存储数据的二维数组需要使用char类型
  • 再输入二维数组以及这个矩阵的转置的转换成int型,字符进行对应的转换
  • 对于矩阵的每个数字分别记录该数字在其所在行、所在列出现的次数(利用数组下标)
  • 如果某个数字在所在行或者所在列出现次数>=2,则该矩阵不是拉丁方;如果全部数字在所在行、所在列出现次数<=1,该矩阵是拉丁方
  • 对于拉丁方再判断矩阵的第一行、第一列是否升序排列(用一个循环即可,如果后面的元素小于前面的元素则不是)

代码实现

代码语言:javascript
复制
#include<bits/stdc++.h>    //万能头文件
using namespace std;
int main()
{
    int n,i,j,num,num1,num2,flag=0;
    char a[50][50],b[50][50];
    int c[50][50],d[50][50],x[50][50],y[50][50];
    cin>>n;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>a[i][j];
            b[j][i]=a[i][j];        //矩阵的转置
            if(a[i][j]>='0' && a[i][j]<='9')     //对应字符的转换
            {
                num1=a[i][j]-48;
            }
            else if(a[i][j]>='A' && a[i][j]<='Z')
            {
                num1=a[i][j]-55;
            }
            
            if(b[j][i]>='0' && b[j][i]<='9')
            {
                num2=b[j][i]-48;
            }
            else if(b[j][i]>='A' && b[j][i]<='Z')
            {
                num2=b[j][i]-55;
            }
            x[i][j]=num1,y[j][i]=num2;       //char类型转换为int类型
            c[i][num1]++;
            d[j][num2]++;
        }
    }
	//判断是否每个数字在其所在行、所在列只出现一次
    for(i=0;i<n;i++)
    {
        for(j=0;j<=35;j++)
        {
            if(c[i][j]>=2 || d[i][j]>=2)    //如果出现次数>=2,标志变量flag=1,表示该矩阵不是拉丁方
            {
                flag=1;
                break;
            }
        if(flag==1)
        {
            break;
        }               
    }
    //int f=0,cnt=0;
    if(flag==0)             //如果该矩阵是拉丁方,判断第一行、第一列的元素是否升序排列
    {
        for(i=1;i<n;i++)
        {
            if(x[0][i]<=x[0][i-1] || y[0][i]<=y[0][i-1])   //升序排列的判断过程
            {
                cout<<"Not Reduced"<<endl;
                break;
            }
            //cnt++;
        }
        if(i==n)
        {
            cout<<"Reduced"<<endl;
        }
        //cout<<"Yes"<<endl;

    }
    else
    {
        cout<<"No"<<endl;
    }
    //system("pause");
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 做题总结—— Latin Squares
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档