编写C++代码,判断0-100内有几个数既是平方数,又是立方数,时间复杂度要最低
时间: 2023-05-25 16:04:05 浏览: 64
一种较为简单的方法是,只需要将所有的平方数和立方数都先算出来,然后再遍历一遍0-100的数,看看有多少个数即是平方数又是立方数。
具体的代码如下:
```c
#include <stdio.h>
int main() {
int i, j;
int square[10], cube[5];
int count = 0;
// 先把0-100内的平方数都算出来
for (i = 0; i <= 10; i++) {
square[i] = i * i;
}
// 再把0-100内的立方数都算出来
for (i = 0; i <= 5; i++) {
cube[i] = i * i * i;
}
// 遍历0-100内的数
for (i = 0; i <= 100; i++) {
// 判断当前数是否是平方数
for (j = 0; j <= 10; j++) {
if (square[j] == i) {
// 如果是平方数,再判断它是否是立方数
for (j = 0; j <= 5; j++) {
if (cube[j] == i) {
count++;
}
}
break;
}
}
}
printf("0-100内有%d个数既是平方数,又是立方数。\n", count);
return 0;
}
```
这里主要利用了两个数组,一个存储0-10内的平方数,一个存储0-5内的立方数。然后再用双重循环分别遍历这两个数组,寻找是否存在同一个数,即可得到有多少个数既是平方数又是立方数。
这种方法的时间复杂度为O(1),因为只需要在最开始算一次平方数和立方数,遍历0-100的数只需要O(1)的时间,所以总的时间复杂度为O(1)。