题目来源:分享一下北邮计算机院2017上机回忆版
题目描述
设一个正整数既是半方数又是立方数时,称其为Special 数。输入包含多组测试数据,第一行输入测试数据的组数,按若在后续每行输入n (n<=109) 的时候,请输出1 到n 中包含的所有Special 数的个数。
Sample Inputs
2
1
64
Sample Outputs
1
2
思路
思路一:.对于每一个立方数 再判断次数是不是平方数 双循环嵌套 复杂度O(n^2)
思路二:设一个大数组 标记所有平方数 在标记一次所有立方数 做交集 得到平方数 进一步计数每个位置的平方数个数 时间复杂度是O(n);
思路三:最简单 既是平方数 又是立方数 那么这个数是 某个数的6次方
代码
#include
#include
using namespace std;
const int maxn = 10010;
int spe[50] = {0};
int cnt = 0;
void cal_special()
{
int spe_num;
int i = 1;
while(1)
{
spe_num = (int)pow( double(i), 6.0 );
if( spe_num >= maxn )
break;
spe[cnt++] = spe_num;
i++;
}
}
思路二代码
#include
using namespace std;
const int maxn = 10010;
bool isspecial[maxn] = {false};
bool square[maxn] = {false};
bool cube[maxn] = {false};
int spe_count[maxn] = {0};
void cal_special()
{
for( int i = 1; i*i < maxn; i++ )
square[i*i] = true;
for( int i = 1; i*i*i < maxn; i++ )
cube[i*i*i] = true;
for( int i = 1; i < maxn; i++ )
if( square[i] && cube[i] )
isspecial[i] = true;
spe_count[1] = 1;
for( int i = 2; i < maxn; i++ )
if( isspecial[i] )
spe_count[i] = spe_count[i-1]+1;
else
spe_count[i] = spe_count[i-1];
}
int main()
{
cal_special();
int T;
cin >> T;
while( T-- )
{
int n;
cin >> n;
cout << spe_count[n] << endl;
}
return 0;
}
题目描述
给定一个长度为n (n>=1)的字符串序列,标记为[qa.a,],在字符串序列上定义以下5种操作类型,分别标号为1,2,3,4,5,同时l和r分别表示 a l a_l al和 a r a_r ar 的下标,len 表示需要操作的子序列长度。操作定义如下:
1 l r
— 将区间[ a l a_l al, a r a_r ar]内的元素逆序。
2 l r len
— 分别从 a l a_l al和 a r a_r ar元素开始,互换len个元素
3 l r x
— 将区间[ a l a_l al, a r a_r ar] 内的元素统一替换成x
4 l r
— 将区间[ a l a_l al, a r a_r ar] 内的元素按升序排序
5 l r
— 计算区间[ a l a_l al, a r a_r ar] 内的元素和,并输出元素和
输入格式
第一行输入n和m,表示字符串序列长度n和操作命令数m,
第二行输入n个整数构成字符串序列,在第三行及之后各行(共计m行)中,每行输入一个操作类型命令。。
输出格式
输出每次的第5种操作类型的结果
Example
Inputs
9 8
1 2 3 4 5 6 7 8 9
1 4 8
5 7 9
2 2 5 3
5 5 9
Outputs
18
26
20
40
代码
#include
#include
using namespace std;
const int maxn = 100;
int num[maxn];
bool cmp( int a, int b )
{
return a > b;
}
int main()
{
int n, m;
cin >> n >> m;
for( int i = 0; i < n; i++ )
cin >> num[i];
int op, l, r, arg, sum;
int i;
while( m-- )
{
cin >> op >> l >> r;
l--;r--;
switch( op )
{
case 1:
reverse( num+l, num+r+1 );
break;
case 2:
cin >> arg;
while( arg-- )
swap( num[l+arg], num[r+arg] );
break;
case 3:
cin >> arg;
for( i = l; i <= r; i++ )
num[i] = arg;
break;
case 4:
sort( num+l, num+r+1 );
break;
case 5:
sum = 0;
for( i = l; i <= r; i++ )
sum += num[i];
cout << sum << endl;
break;
default:
break;
}
}
return 0;
}
题目描述
输入二叉树的前序遍历和中序遍历结果,输出二叉树的后序遍历结果
输入格式
第一行为二叉树先序遍历结果
第二行为二叉树中序遍历结果。
输出格式
二叉树后序遍历结果。
Example
Inputs
426315
623415
Outputs
632514
代码
#include
#include
using namespace std;
const int maxn = 100;
string pre;
string in;
bool firstCase = true;
void toPost( int prel, int prer, int inl, int inr )
{
int i;
for( i = inl; i <= inr && in[i] != pre[prel]; i++ );
int llen = i - inl;
int rlen = inr - i;
if( llen )
toPost( prel+1, prel+llen, inl, i-1 );
if( rlen )
toPost( prer-rlen+1, prer, i+1, inr );
if( firstCase )
firstCase = false;
else
cout << " ";
cout << pre[prel];
}
int main()
{
cin >> pre;
cin >> in;
int len = pre.size();
toPost( 0, len-1, 0, len-1 );
return 0;
}
题目描述
给定一个由数字0或1组成的矩阵,矩阵规模n*m,统计其中的’s’和 ‘8’的个数。注意,'s’和 ‘8’可以没有,也可以分别有多个,并且’s’和‘8’之间用 0分开。
输入格式
第一行输入测试组数。
第二行为第一组矩阵规模n m
接着n行为矩阵数据。
接着为第二组数据…依次类推+
输出格式
输出每组测试数据中’s’和‘8’的个数。
Example
Inputs
2
30 12
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0
Outputs
1 1
0 0