APCS程式檢測 -實作題1051029 第2題 最大和

因為題目中的 M 和 N 都是輸入來的,原本想說用動態宣告陣列或 STL,但是這樣會太複雜,既然題目上說 M 和 N 都 <= 20,那就用 20×20 的二維陣列處理。
如果不清楚二維陣列,可以先來這裡看看
https://husking-studio.com/cpp-2d-array/




第一步:從數字陣列中取最大值的函式
int GetMax(int* pArray, int nNum)
{
int nMax = pArray[0];
for (int i = 1; i < nNum; i++)
{
if (pArray[i] > nMax)
nMax = pArray[i];
}
return nMax;
}
第二步:在二維陣列中取某一列的方式
int* numGroupN; //這個是群
for (int i = 0; i < N; i++)
{
numGroupN = data[i]; //抓出每一個橫列,也就是一群
}
完整程式碼
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int GetMax(int* pArray, int nNum);
int main()
{
const int MAX_N = 20;
const int MAX_M = 20;
int data[MAX_N][MAX_M];
//題目有說數字都大於 1,所以初始化就用 -1 表示沒被用到的格子
for (int i = 0; i < MAX_N; i++)
for (int j = 0; j < MAX_M; j++)
data[i][j] = -1;
//處理 N 和 M 的輸入
string input;
getline(cin, input);
stringstream delim(input);
string pch;
int N;
getline(delim, pch, ' ');
N = stoi(pch);
int M;
getline(delim, pch, ' ');
M = stoi(pch);
//處理輸入
string str;
for (int i = 0; i < N; i++)
{
getline(cin, str);
stringstream delim2(str);
string pch2;
for (int j = 0; j < M; j++)
{
getline(delim2, pch2, ' ');
data[i][j] = stoi(pch2);
}
}
//這個陣列用來存每一群的最大值
int max[MAX_N];
for (int i = 0; i < MAX_N; i++)
max[i] = -1;
int* numGroupN; //這個是群
for (int i = 0; i < N; i++)
{
numGroupN = data[i]; //抓出每一個橫列,也就是一群
max[i] = GetMax(numGroupN, M); //找出一群的最大值,存在 max 陣列裡
}
//把每一群的最大值加起來
int sumGroupN = 0;
for (int i = 0; i < N; i++)
{
sumGroupN = sumGroupN + max[i];
}
cout << sumGroupN << endl;
//這個陣列用來存可以整除總和的數字
int division[MAX_N];
for (int i = 0; i < MAX_N; i++)
division[i] = -1;
int k = 0;
for (int i = 0; i < N; i++)
{
if (sumGroupN % max[i] == 0)
{
division[k] = max[i];
k++;
}
}
//印出答案
if (k == 0)//表示沒有數字可以被總和整除
{
cout << "-1" << endl;
}
else
{
for (int i = 0; i < k; i++)
{
if (i == k - 1)
cout << division[i] << endl;
else
cout << division[i] << " ";
}
}
system("pause");
return 0;
}
int GetMax(int* pArray, int nNum)
{
int nMax = pArray[0];
for (int i = 1; i < nNum; i++)
{
if (pArray[i] > nMax)
nMax = pArray[i];
}
return nMax;
}


不好意思,我是第一次學是C#,想問一下是否有C#解法,謝謝
輸入的部分我就不處理了。您是不是不太會使用二維陣列,其實 C# 的陣列處理比 C++ 方便
https://www.dropbox.com/s/801c9v7bkecd438/Program_1051029_2.cs