2020年“远光杯”粤澳计算机程序设计大赛网络资格赛------O.军训值日生

题目:

每次军训课一结束,同学们都顾不得整理自己的小板凳等训练所需物品,以最快的速度冲向食堂,军训时体能消耗太大了,他们必须轻装前进,抢到自己喜欢的食物。作为军训值日生,小明的工作量非常大,他们要将自己班级中每个同学的小板凳整理好放在一起。

假设在整理前,班级中某些同学的小板凳是放在一起的,我们称放在一起的小板凳为一组小板凳,并且班级中所有小板凳是排成一排的。小明在整理自己班级小板凳的时候,会将相邻的两组小板凳整理到一起,组成一组新的板凳,所消耗的能量是两组板凳数量的乘积。

根据所给出的板凳数量及分组情况,请你帮组小明计算出整理完全班所有小板凳所消耗的最少能量。

输入要求:

有多组数据(不超过5组)。 每组数据包含2行。
第一行包含一个整数n(0<n<=100),表示共有n组小板凳。
第二行包含n个整数mi(0<mi<=100),分别代表整理前每组小板凳的数量。

输出要求:

每组数据输出小明整理完全班所有小板凳所消耗的最少能量。

输入输出:

在这里插入图片描述

简单介绍:
题目:军训值日生
使用语言:C++。
这道题来自2020年“远光杯”粤澳计算机程序设计大赛网络资格赛。

解题思路:
首先看题、分析题意,我们可以明2个关键点:
1.如何整理小板凳小明消耗的能量最少。
2.用什么数据结构保存每组的小板凳
既然,我们已经分析出来题目的关键任务了,下面我们就可以开始思考实现了。
我们采用算法与数据结构的思路来剖析一下这题

数据结构:
要实现对数据的操作,我们要先明确存储数据的数据结构。
该题的数据结构的作用,保存每组的小板凳数目
我们在这里采用一个容器来保存合并前后的小板凳数目

算法:
既然明确了容器作为解决该题的数据结构,我们就可以开始我们的算法分析了。
该题的算法主要实现整理小板凳小明消耗的能量最少
这道题的算法说也可以算是一个数学问题,一开始我认为需要找出小板凳组里最小的两个数相乘,
但是,我在草稿纸上运算一下,发现只要是容器内任意两个就行了。因为不管如何相乘结果都是一样的。
sum=a
b+(a+b)c=ac+(a+c)b=bc+(b+c)a=ab+ac+bc

代码部分:

#include<iostream>
#include<vector>
using namespace std;


int main()
{
	int n;//n组小板凳
	while(cin>>n){
		int sum=0;//每次的总能量
		int temp;
		vector<int> nNum;//n个每组小板凳的数量
		for(int j=0;j<n;j++){
			cin>>temp;//每组小板凳的数量
			nNum.push_back(temp);
		}
		int a;
		int b;
		while(nNum.size()!=1){
			a=nNum.back();
			nNum.pop_back();
			b=nNum.back();
			nNum.pop_back();
			sum=sum+a*b;
			nNum.push_back(a+b);
		}
		cout<<sum<<endl;
		sum=0;
		nNum.clear();
	}
	return 0;
}

结语:
晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!

原创文章 10 获赞 5 访问量 1195

猜你喜欢

转载自blog.csdn.net/weixin_44337475/article/details/105754809