第 273 题 : 循环练习25
(时间限制为:100毫秒)
若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。例如: 由于7396=86^2,且7+3+9+6=25=5^2,则称7396是“四位双平方数”。求所有“四位双平方数”中最小的一个“四位双平方数”。
我编的:#include <iostream>
using namespace std;
int main(){
int m,g,s,b,q,i,x;
for(m=1000;m<=9999;m++)
{
q=m/1000;
b=(m/100)%10;
s=(m/10)%10;
g=m%10;
for(i=1;1;i++){
if(m==i*i)break;}
for(x=1;1;x++){
if(q+b+s+g==x*x)break;}
cout<<m<<endl;break;
}
return 0;
}
我纠结啊,这程序哪里错了?求高手指教!!
C++题目求修改!!!!!
答案:5 悬赏:50 手机版
解决时间 2021-03-10 09:25
- 提问者网友:人生佛魔见
- 2021-03-09 21:20
最佳答案
- 五星知识达人网友:神鬼未生
- 2021-03-09 21:51
你的逻辑判断有问题,两个for的判断应该是包含关系,不是并行关系,算法不是最优化的,结果是1521,不是1000!
#include <stdio.h>
int main()
{
int m,g,s,b,q,i,x,flag;
for(m=1000;m<=9999;m++)
{
q=m/1000;
b=(m/100)%10;
s=(m/10)%10;
g=m%10;
for(i=1;i<100;i++)
{
if(m==i*i)
{
for(x=1;x<=6;x++)
{
if(q+b+s+g==x*x)
{
flag=1;
break;
}
else continue;
}
break;
}
else continue;
}
if(flag==1)
break;
}
if(m>9999)
{
printf("no data found\n");
}
else printf("number=[%d]\n", m);
return 0;
}
#include <stdio.h>
int main()
{
int m,g,s,b,q,i,x,flag;
for(m=1000;m<=9999;m++)
{
q=m/1000;
b=(m/100)%10;
s=(m/10)%10;
g=m%10;
for(i=1;i<100;i++)
{
if(m==i*i)
{
for(x=1;x<=6;x++)
{
if(q+b+s+g==x*x)
{
flag=1;
break;
}
else continue;
}
break;
}
else continue;
}
if(flag==1)
break;
}
if(m>9999)
{
printf("no data found\n");
}
else printf("number=[%d]\n", m);
return 0;
}
全部回答
- 1楼网友:逐風
- 2021-03-10 01:49
恩! 楼上的回答是正确的, 结果是1000。
(时间限制为:100毫秒) 不过你的题好像限制了时间,还得在算法上优化。
- 2楼网友:笑迎怀羞
- 2021-03-10 00:20
#include <iostream>
using namespace std;
int main(){
int m,g,s,b,q,i,x,y;
bool flag;
for(m=1000;m<=9999;m++)
{
q=m/1000;
b=(m/100)%10;
s=(m/10)%10;
g=m%10;
y = q+b+s+g;
for(i=31,flag = false;i*i<=m;i++) //31的平方是三位数最大的
{
if(m==i*i)
{
flag = true;
break;
}
}
if(flag)
{
for(x=1;x*x<=y;x++)
{
if(y==x*x)
{
cout<<i<<"*"<<i<<"="<<m<<endl;
return 1;//这里是退出程序
}
}
}
}
return 0;
}
- 3楼网友:低血压的长颈鹿
- 2021-03-09 22:49
⑴防止输出空行: #include #include #include using namespace std; int main () { char ch[256]; ifstream ifile; ifile.open("..\\exp6_1\\myfile.txt"); cout<<"文件内容:"<
- 4楼网友:傲气稳了全场
- 2021-03-09 21:59
你的程序,在判断是否满足平方数的循环语句中出现了死循环。
我修改后的代码如下,运行结果为:
39
3
1521
Press any key to continue
#include <iostream>
using namespace std;
int main()
{
int m,g,s,b,q,i,x;
for(m=1000;m<=9999;m++)
{
q=m/1000;
b=(m/100)%10;
s=(m/10)%10;
g=m%10;
for(i=1;i<100;i++)
{
if(m==i*i)
break;
}
if(i==100) continue;
for(x=1;x<7;x++)
{
if(q+b+s+g==x*x)
break;
}
if(x==7) continue;
cout<<i<<endl;
cout<<x<<endl;
cout<<m<<endl;
break;
}
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯