C趣味程序百例(19)1~9组成三个3位的平方数
61.1~9组成三个3位数的平方数
将1、2、3、4、5、6、7、8、9九个数分成三组,每个数只能使用一次,即每组中的三个数不允许重复,也不允许与其他组中的三个数重复。要求每组三位数组成一个平方数。
*问题分析与算法设计
这个问题有很多思路。这里有一个简单快速的算法。
首先,找出不包含0且为整数平方的三位数。这样的三位数不多。然后,将满足条件的三个数字组合起来,使得所选的三个数字中的九个数字不重复。
程序可以将求三位数的过程与三位数的数字分解过程结合起来。
*程序和程序注释
# include
void main()
{
int a[20],num [20] [3],b[10];/*a:存储满足条件的三位数*/
/*如果不是10的倍数,分解三位数*/
/*分解三位数中的每一位*/
int i,j,k,m,n,t,flag
printf("各有3个不同数字的3个方块是:\ n ");
for(j=0,i = 11i if(i%10!=0) /*如果不是10的倍数,分解三位数*/
{
k = I * I;/*分解这个三位数中的每一位*/
num[j+1][0]= k/100;/*百位*/
num[j+1][1]= k/10% 10;/*十位数*/
num[j+1][2]= k % 10;/* bits */
if(!(num[j+1][0]= = num[j+1][1]| num[j+1][0]= = num[j+1][2]| |
num[j+1][1]= = num[/* j:counter,对找到的满足条件的三位数进行计数*/
}
for(I = 1;I {
b[1]= num[I][0];
b[2]= num[I][1];
b[3]= num[I][2];
for(t = I+1;t {
b[4]= num[t][0];/*取t数的三位数*/
b[5]= num[t][1];
b[6]= num[t][2];
for(flag=0,m = 1;!为(n = 4;!flag & & n if(b[m]= = b[n])flag = 1;/*flag=1:有重复的号码*/
0条评论