打印符合要求的完全平方数
任务描述输入一个整数n(n<=10000),打印n以内所有这样的完全平方数y:y=a2=b2x10+c2。例如,361=192=62x10+12,则361是这样的完全平方数。
相关知识
完全平方数
条件语句
循环控制语句
编程要求
根据提示,在右侧Begin-End区域编写一个完整满足任务要求的程序。
如果符合条件的完全平方数有2种以上的分解形式,取b较小的分解形式。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
预期输入:
500
预期输出:
49=7*7=2*2*10+3*3
121=11*11=2*2*10+9*9
169=13*13=4*4*10+3*3
196=14*14=4*4*10+6*6
361=19*19=6*6*10+1*1
441=21*21=6*6*10+9*9
484=22*22=4*4*10+18*18
预期输入:
2500
预期输出:
49=7*7=2*2*10+3*3
121=11*11=2*2*10+9*9
169=13*13=4*4*10+3*3
196=14*14=4*4*10+6*6
361=19*19=6*6*10+1*1
441=21*21=6*6*10+9*9
484=22*22=4*4*10+18*18
529=23*23=6*6*10+13*13
676=26*26=8*8*10+6*6
784=28*28=8*8*10+12*12
1089=33*33=6*6*10+27*27
1225=35*35=10*10*10+15*15
1369=37*37=8*8*10+27*27
1444=38*38=12*12*10+2*2
1521=39*39=12*12*10+9*9
1681=41*41=4*4*10+39*39
1764=42*42=12*12*10+18*18
1936=44*44=8*8*10+36*36
2116=46*46=12*12*10+26*26
2209=47*47=6*6*10+43*43
2401=49*49=12*12*10+31*31
我的代码会输出多种分解形式。
请修改我的代码,使它符合如果符合条件的完全平方数有2种以上的分解形式,取b较小的分解形式。
(请不要提供新的代码,否则不予采纳,谢谢)
/********** Begin **********/
#include <stdio.h>
int main()
{
int m,n,y,i,p,q;
int count=0;
scanf("%d",&n);
for(m=1;m<=n;m++)
{
for(i=1;i<200;i++)
{
if(m==i*i)
{
for(p=1;p<200;p++)
{
for(q=1;q<200;q++)
{
if(m==p*p*10+q*q)
{
printf("%d=%d*%d=%d*%d*10+%d*%d\n",m,i,i,p,p,q,q);
}
}
}
}
else continue;
}
}
return 0;
}
/**********End **********/
本帖最后由 大裤衩子 于 2020-10-31 16:39 编辑
多余的变量我就删掉了,还有就是10000以内的话,只循环100次足已。
分解有重复的时候b肯定是从小变大的,所以只需要第一次全部满足条件后跳出循环就可以了。
虽说goto语句多次使用容易让代码混乱,但此处跳出多层循环还是很好用的。{:10_327:}
/********** Begin **********/
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int m=1;m<=n;m++)
{
for(int i=1;i<=100;i++)
{
if(m==i*i)
{
for(int p=1;p<=100;p++)
{
for(int q=1;q<=100;q++)
{
if(m==p*p*10+q*q)
{
printf("%d=%d*%d=%d*%d*10+%d*%d\n",m,i,i,p,p,q,q);
goto out;
}
}
}
out: //要保证m==i*i 成立,所以跳转到此处
continue;
}
}
}
return 0;
}
/**********End **********/
页:
[1]