用面积法解决 乐团站位 (29)

Posted Heisenberg_Posion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用面积法解决 乐团站位 (29)相关的知识,希望对你有一定的参考价值。

题目描述

首先看这个题目真的是毫无下手之力,直到看到一个比较秒的解法,才让我搞懂这个题目怎么做。

题目解法
先确定圈数是(num+1)/2,确定要找的数在第几圈,这个的确定是通过比较 行号,列号,num-行号,num-列号,找到他们的最小值,即是在第几圈,这是看离四边哪边最近。
最外圈面积-所在圈的面积=外面所有元素的个数。
再模9+1就能得到所在圈得左上角得那个数。
最后再判断在圈的哪一边,最后就能计算得出要求的值。
怎么判断看代码就懂了,判断写代码的时候得是if else if else if ,不要写成了全部都是if ,程序会出错,一开始我就犯了这个错误,调试之后才发现出来。

/*某乐团的演出场地可视作 num* num 的二维矩阵 grid(左上角坐标为[0, 0]),每个位置站有一位成员。乐团共有 9 种乐器,乐器编号为 1~9,每位成员持有 1 个乐器。

为保证声乐混合效果,成员站位规则为:自 grid 左上角开始顺时针螺旋形向内循环以 1,2,...,9 循环重复排列。*/

#include<iostream>
using namespace std;

class Solution 
public:
    int orchestraLayout(int n, int xPos, int yPos) 
        long num = n;  //得将n转成long型,不然后面都无法表示。
        int numCircle = (num + 1) / 2;  //圈数
        int listCircle =min(min((long)xPos, (long)yPos), min(num-xPos-1,num-yPos-1))+1;  //要求元素所在的圈数
        long lenthIn = (num - (listCircle - 1) * 2) ;  //所在圈的边长;
        long areaIn = lenthIn * lenthIn;  //所在圈的面积
        long areaOut = num * num;  //总面积
        long index = (areaOut - areaIn) % 9 + 1; //圈内左上角的元素大小
        int left = listCircle - 1, right = num - listCircle;  //获取圈内的左边界和右边界
        //现在只需要判断这个要求的数在这个圈的哪条边
        if (xPos == left)    //在最上边
        
            index = (index + yPos - left) % 9;
        
        else if (yPos == right)    //在右边
        
            index = (index + right - left + xPos - left) % 9;
        
        else if (xPos == right)   //在最下边
        
            index = (index + (right - left) * 2 + right - yPos) % 9;
        
        else if (yPos == left)//在最左边
        
            index = (index + (right - left) * 3 + right - xPos) % 9;
        
        return index == 0 ? 9 : index;
    
;
int main()

    Solution s1;
    int resault = 0;
    resault = s1.orchestraLayout(3,0,2);
    cout << "the ansert is:"<<resault << endl;
	return 0;

以上是关于用面积法解决 乐团站位 (29)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode﹝数学规律ி﹞第N位数字可怜的小猪

LCP 29. 乐团站位

多个矩形,求覆盖面积,周长,及交点

03构建之法阅读笔记

分治法解决残缺棋盘

用字面量创建对象桌子,有属性:长宽高面积体积 有方法:求面积求体积