【发布时间】:2013-12-12 05:40:56
【问题描述】:
任务是在数组中搜索平方数并打印每两个平方的总和。 例如数组以 1 开头,以 9 结尾。首先,应该在数组中找到正方形。在这种情况下 - 1 , 4 , 9。每个的总和将是 1+4=5, 1+9 = 10, 4+9 = 13 。在我的程序中,当我输入起始值 1 和结束值 9 时,它只会打印从 1 到 9 的数组。不知道问题出在哪里。
#include <iostream>
#include <math.h>
using namespace std;
int arr[10][4];
bool sqrsum(int); //prototype
int main (){
int n,m,j,a,b,x,y,finalpoint;
bool noresult;
cout << "Enter array starting value: " << endl;
cin >> n;
cout << "Enter array ending value: " << endl;
cin >> m;
if ((n<0)|| (m<0))
{
cout << "Values cannot be negative." << endl;
}
if (n>m)
{
j=n;
n=m;
m=j;
}
for (int i=n; i<=m; i++)
{
if (sqrsum(i) == true)
{
for (int g=0; g<10; g++)
if (arr[g][0] == -9)
{
finalpoint = g;
break;
}
}
if (finalpoint == 1)
{
cout << i << endl;
}
else
{
for (int g=0; g < (finalpoint / 2); g++)
{
cout << i << endl;
}
}
noresult = false;
}
if (noresult == true)
{
cout << "There is no valid square sum." << endl;
}
}
bool sqrsum(int i)
{
int arr1[101];
int x; // Last address
int z = 0;
bool rettrue = false;
//Function finding squares and their sum.
for (int j=0;j<10;j++)
{
for (int k=0;k<4;k++)
{
arr[j][k] = -9;
}
}
//Finding possible squares
for (int j=0; pow(j,2)<=i; j++)
{
arr1[j] = pow(j,2);
x = j;
}
//Cycles of sum
for (int j=0; j<=x; j++)
{
for (int k=0; k<=x; k++)
{
if (arr1[j] + arr1[k] == i)
{
arr[z][0] = arr1[j];
arr[z][1] = arr1[k];
arr[z][2] = j;
arr[z][3] = k;
z++;
rettrue=true;
}
}
}
if (rettrue == true)
return true;
else
return false;
}
【问题讨论】:
-
从你观察到不良行为的地方开始,向后工作,寻找计算或逻辑中的错误。在程序的关键点插入语句以输出值,以便您可以自己检查状态,或使用调试器。这个过程称为调试程序,是每个程序员必须学会独立完成的事情。
-
@paddy 在这种情况下向后工作可能有点先进,我建议对每一行的调试器进行彻底的逐步检查。注意:显然这段代码只能输出数字 1-9,一次一行,有时一次,有时可能不止一次……
i就是所有的输出。 -
从
cout向后工作并不先进。就像我说的:从观察到不良行为的地方开始。这个问题表明绝对没有努力。这个人清楚地写了一个完整的程序,运行它,当它不起作用时感到惊讶。没有证据表明他们试图隔离和测试单个部件。 -
@paddy 正是为什么我不相信他们的技能来查明问题并从问题中逆向工作...... PS - 编写代码必须付出一些努力。显然这不是来自教程。
标签: c++ arrays perfect-square