2017年360最后一道编程题

简介: A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,但各自的实力都不足以吞下对方,经过谈判后,双方同意用一个公平的方式来处理这片金矿。
A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,
但各自的实力都不足以吞下对方,经过谈判后,
双方同意用一个公平的方式来处理这片金矿。
处理的规则如下:
他们把整个金矿分成n段,由A、B开始轮流从最左端或最右端占据一段,直到分完为止。


马贼A想提前知道他们能分到多少金子,因此请你帮忙计算他们最后各自拥有多少金子?

(两伙马贼均会采取对己方有利的策略)

/*
A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,
但各自的实力都不足以吞下对方,经过谈判后,
双方同意用一个公平的方式来处理这片金矿。
处理的规则如下:
他们把整个金矿分成n段,由A、B开始轮流从最左端或最右端占据一段,直到分完为止。

马贼A想提前知道他们能分到多少金子,因此请你帮忙计算他们最后各自拥有多少金子?
(两伙马贼均会采取对己方有利的策略)
*/ 
#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;

vector<int>count(int m, vector<int>nums) {
	int sumA = 0, sumB = 0, flag = 0, temp=0;
	vector<int>answer;
	for (int i = 0; i < m - 1; i += 2) {
		//上次存的索引位置为偶数
		if (flag % 2 == 0) {
			//此时不需要换
			if (sumA + nums[i] >= sumB + nums[i + 1]) {
				sumA += nums[i];
				sumB += nums[i + 1];
			}
			//此时要换
			else if (sumA + nums[i] < sumB + nums[i + 1]) {
				temp = sumA;
				sumA = sumB;
				sumB = temp;
				sumA += nums[i + 1];
				sumB += nums[i];
				flag = i + 1;
			}
		}
		//上次存的索引位置为奇数
		else if (flag % 2 != 0) {
			//此时无需更换
			if (sumA + nums[i + 1] >= sumB + nums[i]) {
				sumA += nums[i + 1];
				sumB += nums[i];
			}
			//此时需要更换
			else if (sumA + nums[i + 1] < sumB + nums[i]) {
				temp = sumA;
				sumA = sumB;
				sumB = temp;
				sumA += nums[i];
				sumB += nums[i + 1];
				flag = i;
			}
		}
	}
	answer.push_back(sumA);
	answer.push_back(sumB);
	return  answer;
}

int main()
{
	cout << "请输入测试组数" << endl;
	int n = 0, m = 0, temp=0;
	vector<int>nums,answer;
	cin >> n;
	while (n) {
		cout << "请输入每组数据的元素个数" << endl;
		cin >> m;
		cout << "请输入每个元素的值" << endl;
		for (int i = 0; i < m; i++) {
			cin >> temp;
			nums.push_back(temp);
		}
		cout << "元素输入完毕" << endl;
		//调用函数
		answer=count(m, nums);
		cout << "马贼A获得的钱币数:" << answer[0]<< endl;
		cout << "马贼B获得的钱币数:" << answer[1] << endl;
		//输出个换行,为了美观
		cout << endl;
		n--;
		nums.clear();
	}
    return 0;
}


相关文章
|
算法 C++
2023_7_21编程题
2023_7_21编程题
61 0
编程求1+2+3+…+1000的结果。
编程求1+2+3+…+1000的结果。
|
算法 安全 开发者
小孩子学什么编程?
Scratch 是麻省理工学院(MIT)为儿童学习编程而设计开发的一款工具。使用者不用去记复杂的语法,甚至不需要会英语,就可以创建自己的程序、动画、游戏等作品。构成程序的命令和参数通过积木形状的模块来实现,用鼠标拖动模块到程序编辑栏,像搭积木一样就可以实现编程了。
编程题
7.一个采用查询方式输出数据的 I/O 接口中,8 位数据端口地址为 2000H,1 位 状态端口地址为 2002H,外设状态位用 D0 传送,高电平表示数据准备好。设 1000 个字节数据存在内存 BUFFER 为首地址的缓冲区中,写出查询方式输出 1000 个 字节数据的程序段。 LEA SI,BUFFER MOV CX,1000 P: MOV DX,2002H L: IN AL,DX TEST AL,01H JZ L MOV DX,2000H MOV AL,[SI] OUT DX,AL INC SI LOOP P HLT 8.编写完整程序,将键盘输入的小写字母转换成大写字母并输出显示,直
159 0
|
JavaScript 前端开发
编程题:为什么最后一个a是1不是5
前段时间有人在知乎上邀请我回答一个问题:为什么最后一个 a 是 1 不是 5?[1]
253 0
编程题:为什么最后一个a是1不是5
|
Web App开发 移动开发 前端开发
Day 26: TogetherJS —— 让我们一起来编程!
今天的《30天学习30种新技术》挑战,我打算学习一个源自Mozilla的很酷的JavaScript库——TogetherJS。几个月前,我写过一个面向Java 8的在线Java编辑器。今天我将学习如何使用TogetherJS来给这个应用增加协作功能。
205 0
Day 26: TogetherJS —— 让我们一起来编程!
|
程序员 测试技术
|
大数据
我12岁,4年码龄,我是这么学编程的
大家好,我叫摩西。这是我第一次写博客,主要分享下我的编程经验。 国际象棋教给我的道理 我爸爸从小就下国际象棋,小学6年级就拿到俄勒冈州亚军。在我6岁那年,他开始教我。我也喜欢下国际象棋,因为我觉得它是解决问题的一种途径。
2316 0
|
JSON 数据格式 开发者