Problem A
题目:设一个正整数既是平方数又是立方数时,称其为special数。
输入包含多组测试数据,第一行输入测试数据的组数,接着在后续每行输入n(n<= 1000000000)的时候,
请输出1到n中包含的所有special数的个数。
样例输入:
3
1
641000000000
样例输出:
1
2
31
注意:由于1000000000会超出int型数量,故要用long long型存储
参考代码:
#include<stdio.h>
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
注:
/*
思路:
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<stdio.h>
#include<algorithm>
#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;
}