所以,我有以下问题:
将编写以下功能:
实施例:
tabl.in :
4
5 8 2 12
1 0 3 16
1 2 1 11
5 7 2 19
tabl.out :
2 1 3
其中
(12 + 3 + 2 + 5)%10 = 22%10 = 2
22是回文= 1
1 + 2 + 2 + 1 + 7 + 5 = 18,18 / 6 = 3
到目前为止我的代码是:
#include <fstream>
using namespace std;
ifstream fin("tabl.in");
ofstream fout("tabl.out");
void readn(int Arr[][51], int n) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
fin >> Arr[i][j];
}
int sumsec(int Arr[][51], int n) {
int s = 0;
float r;
for (int i = 1; i <= n; i++)
s = s + Arr[i][n - i + 1];
r = s % 10;
return r;
}
void pald(int Arr[][51], int n) {
int s = 0, pal = 0;
for (int i = 1; i < n; i++)
s = s + Arr[i][n - i + 1];
while (s != 0) {
pal = pal * 10 + s % 10;
s = s / 10;
}
if (pal == s)
fout << "1 ";
else
fout << "0 ";
}
int ambmd(int Arr[][51], int n) {
int s = 0, k;
float ame;
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i - 1; j++) {
s = s + Arr[i][j];
k++;
}
}
ame = s / k;
return ame;
}
int main() {
int Arr[51][51], n;
float r, ame;
fin >> n;
readn(Arr, n);
r = sumsec(Arr, n);
fout << r << " ";
pald(Arr, n);
ame = ambmd(Arr, n);
fout << ame;
}
但是palindrome()
函数存在问题:我的输出文件将为示例中的给定数组写入2 0 3
,而不是2 1 3
。我做错了什么?
答案 0 :(得分:0)
如果您使用与pald
中相同的方式计算s
,并且sumsec
仍然包含总和,那么s
功能将起作用{ {1}}。
在您的情况下,pal
,后跟while (s != 0) {...}
可以重写为if (pal == s) {...}
,这显然不是预期的解决方案。只需在计算if (pal == 0)
之前保存总和,然后与保存的总和进行比较。
另外,更改循环条件以将pal
计算为s
。
for (int i = 1; i <= n; i++)
您还应该考虑代码改进的各种注释,例如不重新计算int s = 0, pal = 0, sum = 0;
for (int i = 1; i <= n; i++)
s = s + Arr[i][n - i + 1];
sum = s;
while (s != 0) {
pal = pal * 10 + s % 10;
s = s / 10;
}
if (pal == sum)
fout << "1 ";
else
fout << "0 ";
函数中的总和。