关于for语句思考

来源:互联网 发布:查看交换机端口ip 编辑:程序博客网 时间:2024/05/16 02:52

题目:a的立方 = b的立方 + c的立方 + d的立方为完美立方等式。例如12的立方 = 6的立方 + 8的立方 + 10的立方 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a的立方 = b的立方 + c的立方 + d的立方,其中a,b,c,d 大于 1, 小于等于N。

每行输出一个完美立方,按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则依次按照b、c、d进行非降升序排列输出,即b值小的先输出、然后c值小的先输出、然后d值小的先输出。


第一次:按照要求的输出顺序决定for的层叠顺序

#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;
int main()
{
int N, a, b, c, d;
cin >> N;
for (a = 2; a <= N; a++) {
for (b = a; b <= N; b++) {
for (c = b; c <= N; c++) {
for (d = c; d <= N; d++) {
if (a*a*a == b*b*b + c*c*c + d*d*d) printf("Cube = %d, Triple = (%d,%d,%d)\n", a, b, c,d);
}
}
}
}


return 0;
}

但由于计算量过大,vs没有返回值



为了得出结果,我调整了计算顺序,把a放在最内层

#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;
int main()
{
int N, a, b, c, d;
cin >> N;
for (a = N; a>=2; a--) {
for (b = N; b>=a; b--) {
for (c = N; c>=b; c--) {
for (d = N; d>=c; d--) {
if ((a*a*a + b*b*b + c*c*c) == (d*d*d)) printf("Cube = %d, Triple = (%d,%d,%d)\n", d, a, b, c);
}
}
}
}
system("pause");
return 0;
}

但是,以输入N=24为例,输出结果为:

24
Cube = 24, Triple = (12,16,20)
Cube = 18, Triple = (9,12,15)
Cube = 20, Triple = (7,14,17)
Cube = 12, Triple = (6,8,10)
Cube = 19, Triple = (3,10,18)
Cube = 6, Triple = (3,4,5)
Cube = 18, Triple = (2,12,16)
请按任意键继续. . .


此时重新出现了输出结果排序问题,经检查后发现,问题并不在计算量上,而是写for语句是条件写错,导致a<b<c<d,自然无法得出结果……

谨以此纪念智障时刻

原创粉丝点击