鱼C论坛

 找回密码
 立即注册
查看: 2440|回复: 1

[已解决]打印符合要求的完全平方数

[复制链接]
发表于 2020-10-31 09:13:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
任务描述
输入一个整数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较小的分解形式。
(请不要提供新的代码,否则不予采纳,谢谢)

  1. /********** Begin **********/
  2. #include <stdio.h>
  3. int main()
  4. {
  5.     int m,n,y,i,p,q;
  6.     int count=0;
  7.     scanf("%d",&n);
  8.     for(m=1;m<=n;m++)
  9.     {
  10.         for(i=1;i<200;i++)
  11.         {
  12.             if(m==i*i)
  13.             {
  14.                 for(p=1;p<200;p++)
  15.                 {
  16.                     for(q=1;q<200;q++)
  17.                     {
  18.                         if(m==p*p*10+q*q)
  19.                         {
  20.                             printf("%d=%d*%d=%d*%d*10+%d*%d\n",m,i,i,p,p,q,q);
  21.                         }
  22.                     }
  23.                 }
  24.             }
  25.             else continue;
  26.         }
  27.         
  28.     }
  29.     return 0;
  30. }

  31. /**********  End **********/
复制代码
最佳答案
2020-10-31 16:37:36
本帖最后由 大裤衩子 于 2020-10-31 16:39 编辑

多余的变量我就删掉了,还有就是10000以内的话,只循环100次足已。
分解有重复的时候b肯定是从小变大的,所以只需要第一次全部满足条件后跳出循环就可以了。
虽说goto语句多次使用容易让代码混乱,但此处跳出多层循环还是很好用的。

  1. /********** Begin **********/
  2. #include <stdio.h>
  3. int main()
  4. {
  5.     int n;
  6.     scanf("%d",&n);
  7.     for(int m=1;m<=n;m++)
  8.     {
  9.         for(int i=1;i<=100;i++)
  10.         {
  11.             if(m==i*i)
  12.             {
  13.                 for(int p=1;p<=100;p++)
  14.                 {
  15.                     for(int q=1;q<=100;q++)
  16.                     {
  17.                         if(m==p*p*10+q*q)
  18.                         {
  19.                             printf("%d=%d*%d=%d*%d*10+%d*%d\n",m,i,i,p,p,q,q);
  20.                             goto out;
  21.                         }
  22.                     }
  23.                 }
  24.                 out:   //  要保证m==i*i 成立,所以跳转到此处
  25.                     continue;
  26.             }
  27.         }

  28.     }
  29.     return 0;
  30. }

  31. /**********  End **********/
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-31 16:37:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 大裤衩子 于 2020-10-31 16:39 编辑

多余的变量我就删掉了,还有就是10000以内的话,只循环100次足已。
分解有重复的时候b肯定是从小变大的,所以只需要第一次全部满足条件后跳出循环就可以了。
虽说goto语句多次使用容易让代码混乱,但此处跳出多层循环还是很好用的。

  1. /********** Begin **********/
  2. #include <stdio.h>
  3. int main()
  4. {
  5.     int n;
  6.     scanf("%d",&n);
  7.     for(int m=1;m<=n;m++)
  8.     {
  9.         for(int i=1;i<=100;i++)
  10.         {
  11.             if(m==i*i)
  12.             {
  13.                 for(int p=1;p<=100;p++)
  14.                 {
  15.                     for(int q=1;q<=100;q++)
  16.                     {
  17.                         if(m==p*p*10+q*q)
  18.                         {
  19.                             printf("%d=%d*%d=%d*%d*10+%d*%d\n",m,i,i,p,p,q,q);
  20.                             goto out;
  21.                         }
  22.                     }
  23.                 }
  24.                 out:   //  要保证m==i*i 成立,所以跳转到此处
  25.                     continue;
  26.             }
  27.         }

  28.     }
  29.     return 0;
  30. }

  31. /**********  End **********/
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 10:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表