永发信息网

C++题目求修改!!!!!

答案:5  悬赏:50  手机版
解决时间 2021-03-10 09:25
  • 提问者网友:人生佛魔见
  • 2021-03-09 21:20
第 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;
}
我纠结啊,这程序哪里错了?求高手指教!!
最佳答案
  • 五星知识达人网友:神鬼未生
  • 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;
}
全部回答
  • 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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯