【问题描述】圆盘找数问题。设有20个整数的数组成一个圆(首尾相接),分别求出连续的四个数之和为最大的四个数及其和值)以及连续的四个数之和为最小的四个数(输出整个数列、最大、最小的四个数及其和值。
要求:
(1)圆盘类class circle中包含私有成员int num[20], int Max[4] , int Min[4],int sum_max, int sum_min, 同时根据需要增加私有或公有成员及必要的公有成员函数。
int num[20]; //存放输入的20个随机数
int Max[4]; //20个数中连续4个数之和中最大的那4个连续的数
int Min[4]; //20个中连续4个数之和中最小的那4个连续的数
int sum_max; //20个数中连续4个数之和中最大的和
int sum_min; //20个数中连续4个数之和中最小的和
(2)在键盘随机输入20个数
【输入形式】
9 2 19 65 31 74 89 3 57 81 52 96 63 36 41 44 76 64 84 80
62 37 34 62 24 66 52 34 99 16 85 1 5 33 67 42 80 55 75 58
【输出形式】
圆盘a:
9 2 19 65 31 74 89 3 57 81 52 96 63 36 41 44 76 64 84 80
Max=304
76 64 84 80
Min=95
9 2 19 65
圆盘b:
62 37 34 62 24 66 52 34 99 16 85 1 5 33 67 42 80 55 75 58
Max=268
80 55 75 58
Min=106
1 5 33 67
【样例输入】
【样例输出】
【样例说明】
【评分标准】3个评分点
代码如下:
#include <iostream>
//编译预处理命令
#include <iostream>
#include <algorithm>
using namespace std;
//圆盘类circle的定义与实现
class circle {
private:
int num[20];
int Max[4];
int Min[4];
int sum_max;
int sum_min;
public:
circle() { // 默认构造函数
for (int i = 0; i < 20; i++) {
num[i] = 0;
}
for (int i = 0; i < 4; i++) {
Max[i] = 0;
Min[i] = 0;
}
sum_max = 0;
sum_min = 0;
}
circle(int* arr) { // 带参数构造函数
for (int i = 0; i < 20; i++) {
num[i] = arr[i];
}
for (int i = 0; i < 4; i++) {
Max[i] = 0;
Min[i] = 0;
}
sum_max = 0;
sum_min = 0;
find_max();
find_min();
}
void find_max() { // 计算最大值
int max_sum = 0;
for (int i = 0; i < 17; i++) {
int sum = num[i] + num[(i + 1) % 20] + num[(i + 2) % 20] + num[(i + 3) % 20];
if (sum > max_sum) {
max_sum = sum;
Max[0] = num[i];
Max[1] = num[(i + 1) % 20];
Max[2] = num[(i + 2) % 20];
Max[3] = num[(i + 3) % 20];
}
}
sum_max = max_sum;
}
void find_min() { // 计算最小值
int min_sum = 999999;
for (int i = 0; i < 17; i++) {
int sum = num[i] + num[(i + 1) % 20] + num[(i + 2) % 20] + num[(i + 3) % 20];
if (sum < min_sum) {
min_sum = sum;
Min[0] = num[i];
Min[1] = num[(i + 1) % 20];
Min[2] = num[(i + 2) % 20];
Min[3] = num[(i + 3) % 20];
}
}
sum_min = min_sum;
}
void print_all() { // 输出所有信息
for (int i = 0; i < 20; i++) {
cout << num[i] << " ";
}
cout << endl;
cout << "Max=" << sum_max << endl;
for (int i = 0; i < 4; i++) {
cout << Max[i] << " ";
}
cout << endl;
cout << "Min=" << sum_min << endl;
for (int i = 0; i < 4; i++) {
cout << Min[i] << " ";
}
cout << endl;
}
};
int main(void)
{
circle a; //圆盘类的对象a
int i,test[20];
//输入数据test
int test1[20];
for (int i = 0; i < 20; i++)
{
cin >> test1[i];
}
a=circle(test1);
for (int i = 0; i < 20; i++)
{
cin >> test[i];
}
circle b(test); //圆盘类的对象b
//测试圆盘a,b
cout << "圆盘a:" << endl;
a.print_all();
cout << "圆盘b:" << endl;
b.print_all();
return 0;
}