首先我要纠正昨天博客的一个错误,昨天的博客里我写的是 for( ; ;) 三部分内容都省略的话容易造成死循环,这是错误的说法,正确的说法是 for( ; ;) 就是一个死循环,如果不采取措施(如break ),就永远不会结束。
输出所有形如 aabb 的 4 位完全平方数就是一个 7744 问题。
int a =1, b = 0;
for( a = 1; a <= 9; a++)
for( b = 0; b <= 9; b++)
if(aabb 是完全平方数)
printf("%d\n", aabb);
这个程序并不完整,“aabb 是完全平方数” 是中文描述,并没有一个求取的过程,不是合法的 C 语言表达式。但是这个程序很容易理解,如果aabb 是完全平方数,那就输出 aabb。像这样 “不是真正程序的” 的 “代码” 成为伪代码。伪代码的主要目标就是描述算法梗概,避开细节,启发思路。
接下来我们定义 aabb 的求法: n = a*1100 + b*11,然后判断 n 是不是完全平方数,m = sqrt(n); m*m == n;
我们来看程序:
int main()
{
int a = 1, b = 0, n ,m;
for( a = 1; a <= 9; a++)
for( b = 0; b <= 9; b++)
{
n = a*1100 + b*11;
m = floor(sqrt(n) + 0.5); // floor:返回小于或者等于指定表达式的最大整数,为了减少误差的影响,采用四舍五入 +0.5;
if( m*m == n)
printf("%d\n", n);
}
system("pause");
return 0;
}
运行结果如下: