您的位置:首页 > 编程语言 > Go语言

google 2014在线笔试题

2014-09-18 17:18 357 查看
google 2014在线笔试题

1.个人做google在线笔试题感觉时间很紧,笔试时间只做出来了一个题目就是第二道题,这第一道题是当天晚上才做出来的。。。突然感觉自己很水。。。















个人解决方案需要解决如下子问题

1)判断一个具有坏灯管的数字灯是否显示的是某个数字

2)判断一串灯管显示的是否是以某个数字为首递减的一串数字

3)检查一串匹配正确数字的灯管中坏掉的灯管是哪些

4)输出显示一串正确递减数字的灯管

4)输出显示一串有坏灯管的来显示数字的灯管

#include<iostream>
#include <map>
#include <string>
#include<fstream>
using namespace std;

string myhash[] ={"1111110","0110000","1101101","1111001","0110011","1011011","1011111","1110000","1111111","1111011"};

bool checkNum(string numstr,int num);
string mymain(string *data,int length);
bool checkArray(string * strarr,int length,int bit,int num);
string makebroken(string *data,int length,int minnum);

int main()
{

int num ;
string *data ;
ifstream reader ;
reader.open("A.txt") ;
ofstream writer;
writer.open("test1.txt");
int n;
reader>>n;
for(int i=0;i<n;i++)
{

// get in data
reader>>num;
data = new string[num] ;

for(int j = 0;j<num;j++)
{
reader>>data[j] ;
}

// deal data
writer<<"Case #"<<i+1<<": "<<mymain(data,num)<<endl;
}
reader.close();
writer.close();
system("pause");
return 0;
}

// input num: length of data
// input data: all string data of num
// output: the next num
string mymain(string *data,int length)
{
int resultnum = 0;

const int incorint = -2;
int correctint = incorint;
int checknum ;

for(int i=9;i >= 0;i--)
{
if( checkNum(data[0],i) && checkArray(data,length,0,i) )
{
if(correctint != incorint && correctint != i-length)
resultnum++;
else
{
correctint = (i-length+10) % 10;

// check result
string checkresult = makebroken(data,length,correctint);
if( checkresult == "ERROR!")
{
correctint = incorint ;
resultnum = 0;
}
else
{
resultnum = 1;
}
}
}
}

string result;
if(resultnum == 1)
result = makebroken(data,length,correctint);
else result = "ERROR!";

return result;

}

// input numstr: the string data of num
// input num: the correct num
// output: the check result
bool checkNum(string numstr,int num)
{
bool ok = true;
for(int i=0;i<7;i++)
{
if(numstr[i] == '1' && myhash[num][i] == '0')
{
ok = false;
break;
}
}
return ok;
}

// input strarr: the array of data string
// input length: the length of the array before
// input bit: the get correct number of array bit
// input num: the get correct number
// output bool: true or false for the correct number === arrray[bit]
bool checkArray(string * strarr,int length,int bit,int num)
{
bool result = true;
int n = (num + bit)%10 ;
if(n <= 9 && n >= 0)
{
for(int i=0;i<length;i++)
{
if(checkNum(strarr[i], (n-i+10)%10 ) == false)
{
result = false;
break;
}
}
}
else result = false;
return result;

}

// input strarr: the array of data string
// input length: the length of the array before
// input minnum: the last next number of the array
// output string: the minnum of broken style
string makebroken(string *data,int length,int minnum)
{
bool brokenhash[7];
for( int i=0;i<7;i++ )
{
brokenhash[i] = true;
}
// find all broken
for( int i=0;i<7;i++ )
{
int cornum = (minnum + length)%10;
for( int j=0;j<length;j++ )
{
if(myhash[cornum][i] == '1' && data[j][i] == '0')
{
brokenhash[i] = false;
break ;
}
cornum --;
cornum = (cornum+10) % 10 ;
}
}

// check broken lebs
for( int i=0;i<7;i++ )
{
for( int j=0;j<length;j++ )
{
if( brokenhash[i] == false && data[j][i] == '1')
{
return "ERROR!";
}
}
}

// get data
string result = myhash[minnum];
for(int i=0;i<7;i++)
{
if( brokenhash[i] == false )
result[i] = '0';
}
return result;
}

第二个题 2048
这个是笔试时间内唯一做出来经过测试的。。。















个人解决方案

1)。移动所有数据至紧密

2)。合并数据

3)。移动所有数据至紧密

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

int n;
int **data;
string dir;

void move();
void inData();

int main()
{
inData();
system("pause");
return 0;
}

void inData()
{
ifstream reader;
reader.open("B-small-attempt0.in");
ofstream w;
w.open("1.txt");
int num ;
reader>>num;
for(int m=0;m<num;m++)
{
reader>>n;
data = new int*
;
reader>>dir;
for(int i=0;i<n;i++)
{
data[i] = new int
;
}

for(int i =0;i<n;i++)
{
for(int j=0;j<n;j++)
{
reader>>data[i][j];
}
}

move();

w<<"Case #"<<m+1<<":"<<endl;

for(int i =0;i<n;i++)
{
for(int j=0;j<n;j++)
{
w<<data[i][j]<<' ';
}
w<<endl;
}
}
reader.close();
w.close();

}

void move()
{

if(dir.compare("up") == 0)
{
// up
for(int j=0;j<n;j++)
{
int bit = 0;
for(int i=0;i<n;i++)
{
if(data[i][j] != 0)
{
if( bit != i)
{
data[bit][j] = data[i][j];
data[i][j] = 0;
}
bit++;
}
}
}

for(int i=0;i<n-1;i++)
{
for(int j=0;j<n;j++)
{
if(data [i][j] != 0 && data[i+1][j] == data [i][j])
{
data[i][j] *= 2;
for(int k = i+1;k < n-1;k++)
{
data[k][j] = data[k+1][j];
}
data[n-1][j] = 0;
}

else if( data [i][j] == 0 )
{
for(int k = i;k < n-1;k++)
{
data[k][j] = data[k+1][j];
}
data[n-1][j] = 0;

if( i>1 && data[i][j] == data [i-1][j])
{
data[i-1][j] *= 2;
for(int k = i;k < n-1;k++)
{
data[k][j] = data[k+1][j];
}
data[n-1][j] = 0;
}
}

}
}

// up
for(int j=0;j<n;j++)
{
int bit = 0;
for(int i=0;i<n;i++)
{
if(data[i][j] != 0)
{
if( bit != i)
{
data[bit][j] = data[i][j];
data[i][j] = 0;
}
bit++;
}
}
}
}
else if(dir.compare("right") == 0)
{

// right
for(int i=0;i<n;i++)
{
int bit = n-1;
for(int j=n-1;j>=0;j--)
{
if(data[i][j] != 0 )
{
if( j != bit)
{
data[i][bit] = data[i][j];
data[i][j] = 0;
}
bit--;
}
}
}

for(int j=n-1;j>0;j--)
{
for(int i=0;i<n;i++)
{
if(data [i][j] != 0 && data[i][j-1] == data [i][j])
{
data[i][j] *= 2;
for(int k = j-1;k > 0;k--)
{
data[i][k] = data[i][k-1];
}
data[i][0] = 0;
}

else if( data [i][j] == 0)
{
for(int k = j;k > 0;k--)
{
data[i][k] = data[i][k-1];
}
data[i][0] = 0;

if( j<n-1 && data[i][j] == data[i][j+1])
{
data[i][j+1] *= 2;
for(int k = j;k > 0;k--)
{
data[i][k] = data[i][k-1];
}
data[i][0] = 0;
}
}
}
}

// right
for(int i=0;i<n;i++)
{
int bit = n-1;
for(int j=n-1;j>=0;j--)
{
if(data[i][j] != 0 )
{
if( j != bit)
{
data[i][bit] = data[i][j];
data[i][j] = 0;
}
bit--;
}
}
}
}
else if(dir.compare("down") == 0)
{

// down
for(int j=0;j<n;j++)
{
int bit = n-1;
for(int i=n-1;i>=0;i--)
{
if(data[i][j] != 0)
{
if(bit != i)
{
data[bit][j] = data[i][j];
data[i][j] = 0;
}

bit--;
}
}
}

for(int i = n-1;i>0;i--)
{
for(int j=0;j<n;j++)
{
if(data [i][j] != 0 && data[i-1][j] == data [i][j])
{
data[i][j] *= 2;
for(int k = i-1;k >0;k--)
{
data[k][j] = data[k-1][j];
}
data[0][j] = 0;
}

else if( data [i][j] == 0 )
{
for(int k = i;k >0;k--)
{
data[k][j] = data[k-1][j];
}
data[0][j] = 0;

if( i<n-1 && data[i][j] == data [i+1][j])
{
data[i+1][j] *= 2;
for(int k = i;k >0;k--)
{
data[k][j] = data[k-1][j];
}
data[0][j] = 0;
}
}

}
}

// down
for(int j=0;j<n;j++)
{
int bit = n-1;
for(int i=n-1;i>=0;i--)
{
if(data[i][j] != 0)
{
if(bit != i)
{
data[bit][j] = data[i][j];
data[i][j] = 0;
}

bit--;
}
}
}
}
else if(dir.compare("left") ==0)
{

// left
for(int i=0;i<n;i++)
{
int bit = 0;
for(int j=0;j<n;j++)
{
if(data[i][j] != 0)
{
if(bit != j)
{
data[i][bit] = data[i][j];
data[i][j] = 0;
}

bit++;
}
}
}

for(int j=0;j<n-1;j++)
{
for(int i=0;i<n;i++)
{
if(data [i][j] != 0 && data[i][j+1] == data [i][j])
{
data[i][j] *= 2;
for(int k = j+1;k<n-1;k++)
{
data[i][k] = data[i][k+1];
}
data[i][n-1] = 0;
}

else if( data [i][j] == 0)
{
for(int k = j;k <n-1;k++)
{
data[i][k] = data[i][k+1];
}
data[i][n-1] = 0;

if( j>0 && data[i][j] == data[i][j-1])
{
data[i][j-1] *= 2;
for(int k = j;k <n-1;k++)
{
data[i][k] = data[i][k+1];
}
data[i][n-1] = 0;
}
}
}
}

// left
for(int i=0;i<n;i++)
{
int bit = 0;
for(int j=0;j<n;j++)
{
if(data[i][j] != 0)
{
if(bit != j)
{
data[i][bit] = data[i][j];
data[i][j] = 0;
}

bit++;
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题