Danmoits 发表于 2020-10-31 09:13:01

打印符合要求的完全平方数

任务描述
输入一个整数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:37:36

本帖最后由 大裤衩子 于 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]
查看完整版本: 打印符合要求的完全平方数