以下是引用祁建邵在2020-11-2 10:58:27的发言:
忘记了。
题目:
输出[1,n]内所有的完全平方数。
输入
输入一个正整数n,n < 2^30
输出
输出[1,n]内所有的完全平方数。
样例输入
10
100
样例输出
3
10
说实话,这个题目看不懂,要求输出所有的完全平方数,然而,样例输入和样例输出又是那个样子。
这里有三个技巧:1、最大数一半的平方是绝对要大于最大数的!所以,循环到最大数一半即可,这样可以节省不少的时间;2、两个数相乘所需要的时间也必定小于开平方所需要的时间。3、当 j 大于 i 的平方,中断此次循环,进一步节省时间。下面是我的程序:
程序代码:
#include<stdio.h>
int main()
{
int i,j,n,sum = 0;
scanf_s("%d", &n);
for (i = 1; i <= n / 2; i++)
{
for (j = 1; j <= n; j++)
{
if (j == i * i)
{
printf("%d\n", j);
sum += 1;
}
else if(j > i * i) // 当 j 大于 i 的平方,中断此次循环,进一步节省时间
break;
}
}
printf("%d\n", sum);
}