gpt4 book ai didi

来自 txt : Only reads first square 的 C++ 魔方

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:15 24 4
gpt4 key购买 nike

这与我问过的另一个问题有关,但现在我已经走得更远了。我正在尝试创建一个 Magic Square基于文本文件输入的程序。该程序将读取第一个方 block ,然后为其余方 block 打印出乱码。如果有一个单独的数字,它应该为它后面的方 block 设置参数。所以这是文本文件中的示例:

3      <- this indicates the rows&columns
4 9 2 <- row 1
3 5 7 <- row 2
8 1 6 <- row 3
5 <- start of next square. rows&columns
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
7
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20

这是我目前的程序。我正在尝试按照分配说明进行操作,这就是为什么我按照我的方式设置二维数组和函数的原因

#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

const int SIZE = 20;

void readSquare(int, int[][SIZE]);
void printSquare(int, int[][SIZE]);
bool checkMagic(int, int[][SIZE]);
int sumRow(int, int, int[][SIZE]);
int sumColumn(int, int, int[][SIZE]);
int sumDiagonal1(int, int[][SIZE]);
int sumDiagonal2(int, int[][SIZE]);

int main()
{
int n;
int square[SIZE][SIZE];
ifstream inputFile;
inputFile.open("Prog2Input.txt");

while (inputFile >> n)
{
readSquare(n, square);
printSquare(n, square);
if (checkMagic(n, square))
{
cout << "Magic Square" << endl;
}
else
{
cout << "NOT Magic Square" << endl;
}
system("pause");
}

system("pause");
return 0;
}

void readSquare(int n, int square[][SIZE]) {
ifstream inf("Prog2Input.txt");
int x;
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
inf >> x;
square[i][j] = x;
}
}
}

void printSquare(int n, int square[][SIZE]) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << square[i][j] << " ";
}
cout << endl;
}
}
bool checkMagic(int n, int square[][SIZE]) {
int total = ((1 + n*n) / 2)*n;
for (int i = 0; i < n; i++) {
if (sumRow(i, n, square) != total) {
return false;
}
}
for (int i = 0; i<n; i++) {
if (sumColumn(i, n, square) != total) {
return false;
}
}
if (sumDiagonal1(n, square) != total) {
return false;
}
if (sumDiagonal2(n, square) != total) {
return false;
}
return true;
}

int sumRow(int row, int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[row][i];
}
return sum;
}

int sumColumn(int col, int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[i][col];
}
return sum;
}

int sumDiagonal1(int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[i][i];
}
return sum;
}

int sumDiagonal2(int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[i][(n - i) - 1];
}
return sum;
}

最佳答案

所有,感谢您帮助解决此问题。我将您的意见与我的教授结合起来制作了以下代码。这将处理由初始大小整数指定的未知数量的幻方矩阵。首先是示例文本文件:

3      <- this indicates the rows&columns
4 9 2 <- row 1
3 5 7 <- row 2
8 1 6 <- row 3
5 <- start of next square. rows&columns
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
7
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20

现在代码的最终产品:

#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

const int SIZE = 20;
ifstream inf;

void readSquare(int, int[][SIZE]);
void printSquare(int, int[][SIZE]);
bool checkMagic(int, int[][SIZE]);
int sumRow(int, int, int[][SIZE]);
int sumColumn(int, int, int[][SIZE]);
int sumDiagonal1(int, int[][SIZE]);
int sumDiagonal2(int, int[][SIZE]);

int main()
{
int n;
int square[SIZE][SIZE];
inf.open("Prog2Input.txt");

while (inf >> n)
{
cout << "Matrix Size: " << n << endl;
readSquare(n, square);
printSquare(n, square);
if (checkMagic(n, square))
{
cout << "Magic Square" << endl;
}
else
{
cout << "NOT Magic Square" << endl;
}
cout << endl;
}

system("pause");
return 0;
}

void readSquare(int n, int square[][SIZE]) {
int x;
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
inf >> x;
square[i][j] = x;
}
}
}

void printSquare(int n, int square[][SIZE]) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << square[i][j] << " ";
}
cout << endl;
}
}
bool checkMagic(int n, int square[][SIZE]) {
int total = ((1 + n*n) / 2)*n;
for (int i = 0; i < n; i++) {
if (sumRow(i, n, square) != total) {
return false;
}
}
for (int i = 0; i<n; i++) {
if (sumColumn(i, n, square) != total) {
return false;
}
}
if (sumDiagonal1(n, square) != total) {
return false;
}
if (sumDiagonal2(n, square) != total) {
return false;
}
return true;
}

int sumRow(int row, int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[row][i];
}
return sum;
}

int sumColumn(int col, int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[i][col];
}
return sum;
}

int sumDiagonal1(int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[i][i];
}
return sum;
}

int sumDiagonal2(int n, int square[][SIZE]) {
int sum = 0;
for (int i = 0; i<n; i++) {
sum += square[i][(n - i) - 1];
}
return sum;
}

关于来自 txt : Only reads first square 的 C++ 魔方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34122643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com