[9] Squares and Cubes
题意:t组数据,每行给出一个n,输出从1到n有几个数是平方数或立方数。
算法:无
问题:记录一道codeforces的签到题,初步学习了map的用法。
思路:容斥原理,求出立方数和平方数,减去既是平方又是立方的数字个数(六次方)
代码:前一份未用map,后一份用了。
#include<bits/stdc++.h>
using namespace std;
int t;
int main()
{
scanf("%d", &t);
for (int p = 1; p <= t; p++) {
int n;
scanf("%d", &n);
int cnt1=0, cnt2=0, cnt3=0;
for (int i = 1; i * i <= n; i++) {
cnt1++;
}
for (int i = 1; i * i*i <= n; i++) {
cnt2++;
}
for (int i = 1; pow(i,6) <= n; i++) {
cnt3++;
}
printf("%d\n", cnt1 + cnt2 - cnt3);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int t;
map<int, bool>x;
int main()
{
scanf("%d", &t);
for (int p = 1; p <= t; p++) {
int d;
scanf("%d", &d);
int cnt = 0;
for (int i = 1; i * i <= d; i++) {
cnt++;
x[i * i] = 1;
}
for (int i = 1; i * i*i <= d; i++) {
if (x[i*i*i] == 0) {
cnt++;
}
}
printf("%d\n", cnt);
}
return 0;
}