2017北邮机试(计算机?or 网研?)

Problem A

题目:设一个正整数既是平方数又是立方数时,称其为special数。
            输入包含多组测试数据,第一行输入测试数据的组数,接着在后续每行输入n(n<= 1000000000)的时候,
            请输出1到n中包含的所有special数的个数。

样例输入:

3
1
64

1000000000

样例输出:

1

2

31 

注意:由于1000000000会超出int型数量,故要用long long型存储 

参考代码: 

#include
typedef long long ll;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		ll n;
		scanf("%lld",&n);
		int num=0;
		int l_num= 0;//是否为立方数 
		for(ll i=1; i*i*i<=n; i++)//降低数量级 !!!!
		{
			l_num=1;
			for(int j=1; j<=i; j++)
			{
				if(j*j==i&&l_num==1)
				{
					num++;
				}
			}
			l_num=0;
		}
		printf("%d\n",num);
	}
	return 0;
}

Problem B 

2017北邮机试(计算机?or 网研?)_第1张图片

注:

/*
思路:
 9 8
 1 2 3 4 5 6 7 8 9
 1 4 8-->1 2 3 8 7 6 5 4 9
 5 7 9-->5+4+9=18
 2 2 5 3-->1 7 6 5 2 3 8 4 9
 5 5 9-->26
 3 5 8 3-->1 7 6 5 3 3 3 3 9
 4 3 8-->1 7 3 3 3 3 5 6 9
 5 7 9-->5+6+9=20
 */
 /*
测试数据:
9 8
1 2 3 4 5 6 7 8 9
1 4 8
5 7 9
2 2 5 3
5 5 9
3 5 8 3
4 3 8
5 7 9
5 1 9
*/

参考代码:

#include
#include
#define maxn 10000
using namespace std;

int main()
{
	int n,m;
	int a[maxn];
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; i++)
	{
		scanf("%d",&a[i]);
	}
	
	while(m--)
	{
		int num,len,l,r,x;
		scanf("%d",&num);
		if(num==1)
		{
			scanf("%d%d",&l,&r);
			while(l<=r)
			{
				int temp;
				temp=a[l];
				a[l]=a[r];
				a[r]=temp;
				l++;
				r--;
			}
		}
		if(num==2)
		{
			scanf("%d%d%d",&l,&r,&len);
			while(len--)
			{
				int temp;
				temp=a[l];
				a[l]=a[r];
				a[r]=temp;
				l++;
				r++;
			}
		}
		if(num==3)
		{
			scanf("%d%d%d",&l,&r,&x);
			while(l<=r)
			{
				a[l]=x;
				l++;
			}
		}
		if(num==4)
		{
			scanf("%d%d",&l,&r);
			sort(a+l,a+r+1);
		}
		if(num==5)
		{
			scanf("%d%d",&l,&r);
			int sum=0;
			for(int i=l;i<=r;i++){
				sum+=a[i];
			} 
			printf("%d\n",sum);
		}
	}
	return 0;
}

 

你可能感兴趣的:(算法刷题笔记)