微软笔试题(苏州)

题目是  小明迷路了,求出他的方位,具体的题目没了,所以没有弄过来,希望大家海涵或者提供一下

#include <iostream>
#include <utility>
#include <fstream>
using namespace std;

int N;
int M;
char ** allmap;
char ** side;
int const side_length = 3;

const pair<int,int> error = make_pair(-1,-1);

bool northcheckplace(int x,int y);
void getdata();
void findplace();
bool eastcheckplace(int x,int y);
bool sourthcheckplace(int x,int y);
bool westhcheckplace(int x,int y);
void readdata();

int main()
{
getdata();
//readdata();
	findplace();
	system("pause");
	return 0;
}

void getdata()
{
	cin>>N;
	cin>>M;
	allmap = new char*[N];
	for(int i=0;i<N;i++)
	{
		allmap[i] = new char[M];
		for(int j=0;j<M;j++)
		{
			cin>>allmap[i][j];
		}
	}

	side = new char*[side_length];
	for(int i=0;i<side_length;i++)
	{
		side[i] = new char[side_length];
		for(int j=0;j<side_length;j++)
		{
			cin>>side[i][j];
		}
	}
}

void findplace()
{
	pair<int,int> result;
	result  = error;
	for(int i=0;i <= N-side_length;i++)
		for(int j=0;j <= M-side_length;j++)
		{
			if( northcheckplace(i,j) == true )
				cout<<i+2<<" "<<j+2<<endl;
			else if( eastcheckplace(i,j) == true )
			{
				cout<<i+2<<" "<<j+2<<endl;
			}
			else if( sourthcheckplace(i,j) == true )
			{
				cout<<i+2<<" "<<j+2<<endl;
			}
			else if( westhcheckplace(i,j) == true )
			{
				cout<<i+2<<" "<<j+2<<endl;
			}

		}
}

bool northcheckplace(int x,int y)
{

	for(int i=0;i<side_length;i++)
		for(int j=0;j<side_length;j++)
		{
			if(allmap[x+i][y+j] != side[i][j])
				return false;
		}

		return true;
}

bool eastcheckplace(int x,int y)
{

	for(int i=0;i<side_length;i++)
		for(int j=0;j<side_length;j++)
		{
			if(allmap[x+i][y+j] != side[side_length-j-1][i])
				return false;
		}

	return true;
}

bool sourthcheckplace(int x,int y)
{

	for(int i=0;i <side_length ;i++)
		for(int j=0;j <side_length;j++)
		{
			if(allmap[x+i][y+j] != side[side_length-1-i][side_length-1-j])
				return false;
		}

		return true;
}

bool westhcheckplace(int x,int y)
{

	for(int i=0;i<side_length;i++)
		for(int j=0;j<side_length;j++)
		{
			if(allmap[x+i][y+j] != side[j][side_length-1-i])
				return false;
		}

		return true;
}

void readdata()
{
	ifstream reader;
	reader.open("data.txt");
	reader>>N;
	reader>>M;
	allmap = new char*[N];
	for(int i=0;i<N;i++)
	{
		allmap[i] = new char[M];
		for(int j=0;j<M;j++)
		{
			reader>>allmap[i][j];
		}
	}

	side = new char*[side_length];
	for(int i=0;i<side_length;i++)
	{
		side[i] = new char[side_length];
		for(int j=0;j<side_length;j++)
		{
			reader>>side[i][j];
		}
	}
	reader.close();
}
时间: 2024-11-03 20:48:52

微软笔试题(苏州)的相关文章

白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)

首先来看看原题 微软2010年笔试题 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序数对.一个排列中逆序的总数就称为这个排列的逆序数.如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定一数组,要求统计出该数组的逆序数对个数. 计算数列的逆序数对个数最简单的方便就最从前向后依次统计每个数字与它后面的数字是否能组成逆序数对.代码如下: #include <stdio.h> int main()

微软笔试题,机器人消砖块

我比较傻叉,居然忘了用动态规划做,用了递归,各种边界判断,而且数组稍大一点就栈溢出.递归可以剪支,稍微减少一些递归次数.不管怎么样还是贴上自己的傻叉代码吧 #include<iostream> using namespace std; const int M = 10;///列 const int N = 10;///行 int min = N+M; char A[N][M]; ///d=1代表向下走,d=0代表向右走 void f(char A[N][M], int i,int j,int

微软笔试题,luckstring

解析:这题主要在于字典排序和重复判断,其实只要使用TreeSet这个能排序的SET集合类就可以轻松解决了 1 import java.util.Scanner; 2 import java.util.TreeSet; 3 import java.util.ArrayList; 4 5 public class Main{ 6 7 public static void main(String[] args){ 8 //扫描获取字符串 9 Scanner s = new Scanner(System

一道有趣的微软笔试题

老师d 的物理测验答案在教室里丢失了,今天那个教室上了5 堂课,老师d 上了3 堂,有可能是a.b.c 三个同学盗窃已知:1.a 上了两堂课2.b 上了三堂课3.c 上了四堂课4.a.b.c 每个人都上了老师d 的两堂课5.五堂课中,三个人到堂的组合各不相同6.老师d 的课中有一堂,三个人中到了两个,事后证明不是那两个人偷得问?是谁偷得

送上今年微软的一道笔试题

这里送上一道微软的笔试题,具体题目如下: Time Limit: 10000msCase Time Limit: 1000msMemory Limit: 256MB Description Consider a string set that each of them consists of {0, 1} only. All strings in the set have the same number of 0s and 1s. Write a program to find and outp

2015微软实习在线笔试题 - Professor Q&#39;s Software

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Professor Q develops a new software. The software consists of N modules which are numbered from 1 to N. The i-th module will be started up by signal Si. If signal Si is generated multiple times, the i-th module

算法练习--微软面试题26-50

26.左旋转字符串(字符串) 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数.要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1). 27.跳台阶问题(递归)题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级.求总共有多少总跳法,并分析算法的时间复杂度. 这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试

【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n)[10]; struct MyStruct { char dda; double dda1; int type ; }; MyStruct k; printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(

华为C语言笔试题集合

①华为笔试题搜集 1.static有什么用途?(请至少说明两种)    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.    2) 在模块内(但在函数体外),一个被声明为静态的变量能够被模块内所用函数訪问,但不能被模块外其他函数訪问.它是一个本地的全局变量.    3) 在模块内,一个被声明为静态的函数仅仅可被这一模块内的其他函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么差别?    1) 引用必须被初始化,指针不必.    2)