题目解析:
这题其实就是一个二维矩阵,给你一个编号,让你输出这个编号所在的位置
使用算法:
这题的范围:n,m,k.( 1<=n,m<=10000 , 1<=k<=2 * n* m )
所以这道题不能用二维数组直接来模拟,我自己在做的时候又想到了STL中的vector,
但又觉的太麻烦,所以就想了一个简便一点的方法:不模拟出一个二维矩阵,直接查找编号
其核心就是三重循环
代码实现:
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int t=1;t<=2;t++)
{
cnt++;
if(cnt==k)
{
quick_out(i);
putchar(' ');
quick_out(j);
putchar(' ');
if(t==1) putchar('L');
else putchar('R');
putchar('\n');
return 0;
}
}
}
}
接着就是整段代码了
(我知道泥萌就要看这个)
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m,k;
cin>>n>>m>>k;
int cnt=0; //一个计数器
for(int i=1;i<=n;i++) //第一重循环,模拟行
{
for(int j=1;j<=m;j++) //第二重,模拟列
{
for(int t=1;t<=2;t++) //第三重,模拟出每列的左右两边
{
cnt++;
if(cnt==k) //如果计数器的编号等于要找的编号,输出
{
cout<<i<<" "<<j<<" "; //输出横坐标和纵坐标
if(t==1) cout<<'L'; //输出是左还是右
else cout<<'R';
putchar('\n'); //换行
return 0; //结束,return 0
}
}
}
}
return 0;
}