鹅厂2016实习笔试程序题
2016-04-14 23:42
351 查看
本文两道程序题是2016年4月腾讯的笔试题,当时只写出第二道,第一道关系搞的晕乎乎的。正好今天有时间,大概回忆了下题目,重新实现了一遍(可能和原题有点出路)。
1、最大回文长度
题目大概意思是,输入一个字符串,返回最大子串长度,字串字符再原字符串可以不联系
例如 cabbeaf,回文字串有 c、a、b、e、f、bb、aba、abba,最长的就是abba,长度4,最后输出4.
解题思路:用两个指针,对于字符串,也就是两个下标,一个 i 从字符串开头往后走,一个 j 从字符串尾往前走。代码如下:
上面代码好像还有问题,这里提供牛客网友提供的动态规划点击打开链接实现以供学习
2 、蛇形矩阵
题目:输入一个整数N表示矩阵行列数,顺时针 从1 递增,一圈一圈往里转,生成矩阵,最后按行输出每个元素。。渣渣表达,直接看栗子
输入 :4
矩阵: 1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
输出:1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
解题思路:这题相对简单一些,首先感觉输入的你 n 得到蛇形圈数 n/2 。然后一圈一圈顺时针往里转
1、最大回文长度
题目大概意思是,输入一个字符串,返回最大子串长度,字串字符再原字符串可以不联系
例如 cabbeaf,回文字串有 c、a、b、e、f、bb、aba、abba,最长的就是abba,长度4,最后输出4.
解题思路:用两个指针,对于字符串,也就是两个下标,一个 i 从字符串开头往后走,一个 j 从字符串尾往前走。代码如下:
/************************************************************************* > File Name: longestplalindrome.cpp > Author : BruceLv > Mail : lvmaoxv@163.com > Created Time: 2016年04月14日 星期四 20时15分52秒 ************************************************************************/ #include<iostream> #include<string> using namespace std; int longestplalindrome(string s) { int n = s.length(); if(n<=1)return n; int i,j,cnt=0,t=n-1; for(i=0;i<t;i++){ for(j=t;j>i;){ if(s[i]==s[j]){ ++i; cnt++; t = --j; } else --j; } } if(i-j==1)return 2*cnt+1; if(i-j==2) return 2*cnt; } int main() { string s; while(getline(cin,s)){ int n = longestplalindrome(s); cout<<n<<endl; } return 0; }
上面代码好像还有问题,这里提供牛客网友提供的动态规划点击打开链接实现以供学习
#include<iostream> #include <algorithm> #include <string> int dp[1000][1000]; using namespace std; //思路就是求这个原字符串和它反转字符串的最长公共子序列 int longestPlalindrome(string s) { string str = s; reverse(str.begin(),str.end()); int len=s.length(); for(int i=1;i<=len;i++){ for(int j=1;j<=len;j++){ if(s[i-1]==str[j-1]){ dp[i][j]=dp[i-1][j-1]+1; } else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } return dp[len][len]; } int main() { string str; while(cin>>str){ int len = longestPlalindrome(str); cout<<len<<endl; } return 0; }
2 、蛇形矩阵
题目:输入一个整数N表示矩阵行列数,顺时针 从1 递增,一圈一圈往里转,生成矩阵,最后按行输出每个元素。。渣渣表达,直接看栗子
输入 :4
矩阵: 1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
输出:1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
解题思路:这题相对简单一些,首先感觉输入的你 n 得到蛇形圈数 n/2 。然后一圈一圈顺时针往里转
/************************************************************************* > File Name: snakeMatrix.cpp > Author : BruceLV > Mail : lvmaoxv@163.com > Created Time: 2016年04月14日 星期四 23时08分59秒 ************************************************************************/ #include<iostream> using namespace std; int main() { int n; while(cin>>n){ int x,y,r,cnt=1; int **a = new int* ; for(int i=0;i<n;i++) a[i] = new int ; if(n==1)a[0][0]=cnt; else{ for(r=0;r<n/2;r++){ x=r; //行 for(y=r;y<n-r;y++) a[x][y]=cnt++; y=n-r-1; for(x=r+1;x<n-r-1;x++) a[x][y]=cnt++; x=n-r-1; for(y=n-r-1;y>r;y--) a[x][y]=cnt++; y=r; for(x=n-r-1;x>r;x--) a[x][y]=cnt++; if(n%2) //如果n是奇数,补全中间空位 a[n/2][n/2]=cnt; } } for(int i=0;i<n;i++) for(int j=0;j<n;j++) cout<<a[i][j]<<" "; for(int i=0;i<n;i++) delete[] a[i]; delete[] a; } return 0; }
相关文章推荐
- 盒子模型的百分比是根据什么来的
- 用RBG颜色设置自定义颜色
- Docker的镜像和容器的区别
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
- X86汇编基础
- 栈的操作
- 为什么不应该买小房换大房?
- 基于Sublime Text搭建Python IDE
- 回文词(UVa401)
- 2.2.3 X Window的学习
- C++中负数的位操作
- 电脑常识和电脑常见故障
- java面向对象三大特征之多态
- C++中负数的位操作
- WebApplicationInitializer (spring 3.x.x以上版本)
- 享元模式
- 浅析Java中的访问权限控制
- spring+springmvc+mybatis详细运转流程
- 2.2.2 学习心态的分别
- Java异常处理的一些常见问题