Time Limit: 1000 ms
Memory Limit: 256 mb
给你一个长度为m的数组(数组元素从0到m-1),如果数组里有a[i]+a[j]==ak,便称之为三元组。现在给你一个数组,让你求三元组的个数。
例如m为2,里面的元素为(0,0)
那么三元组为
(a[0],a[0],a[0])
(a[0],a[0],a[1])
(a[0],a[1],a[0])
(a[0],a[1],a[1])
(a[1],a[0],a[0])
(a[1],a[0],a[1])
(a[1],a[1],a[0])
(a[1],a[1],a[1])
输出答案为8.
输入输出格式
输入描述:
输入正整数N,表示N例测试。接着输入N组数据,每组输入m(1<=m<=50),表示数组长度,然后输入这个数组。
输出描述:
对每组输入数据,输出三元组的个数。
输入输出样例
输入样例#:
2
2
0 0
5
1 1 1 2 1
输出样例#:
8
16
题目来源
北京邮电大学2016年计算机考研机试试题
真题链接在此
思路:直接暴力,三层for循环,尝试每一种可能性,再判断是否符合题目要求即可
#include
#include
#include
#include
#include
using namespace std;
int main(){
int t;
cin>>t;
for(int i=1;i<=t;i++){
int h[100];
int n;
cin>>n;
for(int j=1;j<=n;j++)
cin>>h[j];
int sum=0;
for(int k1=1;k1<=n;k1++){
for(int k2=1;k2<=n;k2++){
for(int k3=1;k3<=n;k3++){
if(h[k1]+h[k2]==h[k3])
sum++;
}
}
}
cout<<sum<<endl;
}
return 0;
}
Time Limit: 1000 ms
Memory Limit: 256 mb
问题描述
给你一个01序列,HDLC协议处理的话,如果出现连续的5个1会补1个0。例如1111110,会变成11111010。
现在给你一个经过HDLC处理后的01序列,你需要找到HDLC处理之前的01序列。
例如给你11111010
你需要输出1111110
输入描述:
输入正整数N,表示N例测试。接着输入N组数据,每组输入经过HDLC处理过的01序列(长度小于100)。
输出描述:
对每组输入数据,输出HDLC处理前的01序列。
输入输出样例
输入样例#:
2
11111010
1111100
输出样例#:
1111110
111110
题目来源
北京邮电大学2016年计算机考研机试试题
真题链接在此
思路:这里用到了string的erase函数
string.erase(pos,n) //删除从pos开始的n个字符 如:string.erase(0,1); 删除第一个字符,然后从前向后用一个变量记录当前连续的1的个数即可
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
string h;
cin>>h;
char k[105];
int num=0;
for(int j=0;j<h.size();j++){
if(h[j]=='0')
num=0;
else
num++;
if(num==5){
num=0;
h.erase(j+1,1);
}
}
cout<<h<<endl;
}
return 0;
}
Time Limit: 1000 ms
Memory Limit: 256 mb
3*3的矩阵内容。1 2 3
2 4 6
3 6 9即a[i][j]=i*j。
(1<=i<=n,1<=j<=n)
问一个这样n*n的矩阵里面,里面m出现的次数。例如n为3,m为6.
那么出现的次数就是2
输入输出格式
输入描述:
输入正整数N,表示N例测试(N<=20)。接着输入n(n<=10^5)
m(m<=10^9)
输出描述:
对每组输入数据,输出m出现的次数。
输入输出样例
输入样例#:
2
3 6
3 3
输出样例#:
2
2
题目来源
北京邮电大学2016年计算机考研机试试题
真题链接在此
思路:这里可以将该矩阵看成一个上三角矩阵,这样我们只需要统计上三角的部分,最后的结果=主对角线的种类+上三角中除了主对角线的种类数*2,简单模拟即可
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main(){
int n;
cin>>n;
int t1,t2;
for(int i=1;i<=n;i++){
cin>>t1>>t2;
int num=0;
int sum=0;
for(int i=1;i<=sqrt(t2);i++){
if(t2%i==0){
int k=t2/i;
if(k<=t1){
if(k==i)
sum++;
else
num++;
}
}
}
sum=sum+num*2;
cout<<sum<<endl;
}
return 0;
}
Time Limit: 1000 ms
Memory Limit: 256 mb
有以下三种操作。(1)COPY l r(0<=l<=r
例如s为abcde t为pqr
执行COPY 1 2变为
s为abcde t为bc
(2)CUT l r(0<=l<=r
例如s为abcde t为pqr
执行CUT 1 2变为
s为ade t为bc
(3)PASTE p(0<=p
例如s为abcde t为pqr
执行PASTE 1 变为
s为abpqrcde
t为pqr
输入输出格式
输入描述:
多组测试数据。
首先给你s串,再给你一个m,然后给你m个操作。
输出描述:
对每个操作,输出操作后的s串。
输入输出样例
输入样例#:
abcde
5
CUT 1 2
COPY 0 1
PASTE 1
PASTE 1
CUT 1 3
输出样例#:
ade
ade
adade
adadade
aade
题目来源
北京邮电大学2016年计算机考研机试试题
真题链接在此
思路:开了两个char类型的数组,然后维护数组的长度,进行不同种类操作的模拟即可,如果用char数组的话,必须维护数组的长度,不必关心数组长度以外的数组中的内容是什么,因为也用不到。
#include
using namespace std;
int main(){
char s[10010];
char t[10010];
int l1=0,l2=0; //l1代表数组s的长度,l2代表数组t的长度
int n;
cin>>s;
cin>>n;
for(int i=0;;i++){
if(s[i]!='\0')
l1++;
else
break;
}
for(int i=1;i<=5;i++){
string h;
cin>>h;
int m1,m2;
if(h=="CUT"){
cin>>m1>>m2;
int kk=m2-m1+1;
int ll=0;
for(int j=m1;j<=m2;j++){
t[ll]=s[j];
ll++;
}
l2=ll;
for(int j=m2+1;j<l1;j++)
s[j-kk]=s[j];
l1-=kk;
}
else if(h=="COPY"){
cin>>m1>>m2;
int ll=0;
for(int j=m1;j<=m2;j++){
t[ll]=s[j];
ll++;
}
l2=ll;
}
else if(h=="PASTE"){
cin>>m1;
for(int j=l1-1;j>=m1+1;j--){
s[j+l2]=s[j];
}
int kk=0;
for(int j=m1+1;j<=m1+l2;j++){
s[j]=t[kk];
kk++;
}
l1+=l2;
}
for(int j=0;j<l1;j++)
cout<<s[j];
cout<<endl;
}
return 0;
}