移动端重要知识点

CCF1003--猜数游戏(C++)

  返回  

PAT Basic Level 1070 结绳 解题思路及AC代码 v1.0

2021/8/20 11:27:51 浏览:

PAT 乙级 1070 结绳 v1.0

    • 1. 题目简述及在线测试位置
    • 2. 基本思路
    • 3. 完整AC代码

1. 题目简述及在线测试位置

1.1 给定一段一段的绳子,把它们串成一条绳。每次串连的时候,先把两段绳子对折,再套接在一起(每次串连后,原来两段绳子的长度就会减半),这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。求绳子的最大串连长度
1.2 在线测试位置: 1070 结绳

2. 基本思路

2.1 解题的关键是:如何串连,才能得到最大的串连长度?通过分析示例可以看到,如果要得到最大串连长度,最长的绳子对折的次数必须最少

input:
8
10 15 12 3 4 13 1 15 
output:
14

2.2 据此思路,将初始数据按从小到大排序,依次执行 相加并除2(请参考如下代码) ,这样就可以保障最长的绳子对折的次数最少

	Sum = a[0];
	for (int i = 1; i < N; i++)
	{
		Sum = (Sum + a[i]) / 2;
	}

3. 完整AC代码

#include <stdlib.h> //malloc()
#include <algorithm> //sort()
#include <iostream>
using namespace std;

int main()
{
	int N; double Value,Sum;
	cin >> N;
	double* a = (double*)malloc(sizeof(double) * N);

	for (int i = 0; i < N; i++)
	{
		cin >> Value;
		a[i] = Value;
	}

	sort(a, a + N);

	Sum = a[0];
	for (int i = 1; i < N; i++)
	{
		Sum = (Sum + a[i]) / 2;
	}

	cout << (int)Sum;


	return 0;
}

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号