2010年上海交通大学计算机研究生机试真题
2016-04-09 19:53
369 查看
题目1099:后缀子串排序
题目描述:对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n
然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
输入:
每个案例为一行字符串。
输出:
将子串排序输出
样例输入:
grain
样例输出:
ain grain in n rain
<pre name="code" class="cpp">#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string str; string arr[100]; while(cin >> str){ int len = str.length(); for(int i=0; i<len; i++) arr[i] = str.substr(len-i-1,len);//substr(i,n)获得字符串str中 从第i位开始的长度为n的字符串. sort(arr,arr+len);//从小到大排序 for(int i=0; i<len; i++) cout << arr[i] << endl; } return 0; }
题目1101:计算表达式
题目描述:对于一个不存在括号的表达式进行计算
输入:
存在多种数据,每组数据一行,表达式不存在空格
输出:
输出结果
样例输入:
6/2+3+3*4
样例输出:
18
//思路:就是如果遇到减就把原来的数变成其相反数,对于乘除运算就直接先运算,总之最后直接将所有的进行相加就好 #include<iostream> #include<cstdio> using namespace std; int main() { int i,j;//a是数字 char c;//输入运算符 double b[100],temp; while(scanf("%lf",&temp)!=EOF)//cin>>temp就不对,scanf就是对的。不明觉厉,还有木有!=EOF就超时 { b[0]=0; b[1]=temp; i=1; while(scanf("%c",&c)!=EOF && c!='\n') { scanf("%lf",&temp); if(c=='+') b[++i]=temp; else if(c=='-') b[++i]=-1*temp; else if(c=='*') b[i]=b[i]*temp; else if(c=='/') b[i]=b[i]*1.0/temp; } for(j=1;j<=i;j++) b[0]+=b[j]; cout<<b[0]<<endl; } return 0; }
题目1102:最小面积子矩阵
题目描述:一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积)
输入:
每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K
接下来N行,每行M个数,表示矩阵每个元素的值
输出:
输出最小面积的值。如果出现任意矩阵的和都小于K,直接输出-1。
样例输入:
4 4 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
样例输出:
1
//暴力求解 #include<iostream> #include<cstdio> using namespace std; int a[100][100]; int n,m,k,ok,sum; void solve(int i,int j) { int q,p,temp; for(p=i;p<n;p++) { for(q=j;q<m;q++) { if(ok&&((p-i+1)*(q-j+1)>=sum))//ok=1表示之和大于K,(p-i+1)*(q-j+1)表示矩阵元素的个数 break; temp=0; for(int x=i;x<=p;x++) for(int y=j;y<=q;y++) temp+=a[x][y]; if(temp>=k) { ok=1; sum=(p-i+1)*(q-j+1); } } } } int main() { // freopen("datain.txt","r",stdin); //freopen("dataout.txt","w",stdout); while(cin>>n>>m>>k) { sum=0; ok=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) solve(i,j);//以(i,j)为左上方的顶点进行计算。 if(ok) cout<<sum<<endl; else cout<<"-1"<<endl; } return 0; }
相关文章推荐
- 当没有网络时,用intent去设置网络
- 浙江大学-计算机中的数学(诙谐幽默的短视频)
- TCP/IP协议族-----13、运输层简单介绍
- VMware网络连接模式详解:桥接、NAt、host-only
- TCP/IP协议栈分析
- 第五届华中区程序设计邀请赛暨武汉大学第十四届校赛 网络预选赛 E Calculation 状态压缩DP枚举子集
- iOS数据库离线缓存思路和网络层封装——原理
- JAVA Socket 底层是怎样基于TCP/IP 实现的
- Java_SE10-多线程,TCP通信
- 第五届华中区程序设计邀请赛暨武汉大学第十四届校赛 网络预选赛 A Minimum Sum 树状数组
- TCP状态转移图和四次握手
- Android 学习记录-网络请求
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest
- 初级线段树 POJ3264
- TCP/IP协议栈概述及各层包头分析
- SpringMVC源码剖析(五)-消息转换器HttpMessageConverter
- android网络框架asyncHttpClient 的二次封装
- https://code.csdn.net/xiebaoyou/linux-4-3-0-comment
- 解决“你没有权限访问,请与网络管理员联系”
- 百度语音识别REST API——通过使用Http网络请求方式获得语音识别功能