拼多多秋招笔试飞行棋问题(C++)

7 篇文章 0 订阅
7 篇文章 0 订阅

题目大概的问题是:棋子当前离终点距离为K,筛子的个数为N,摇一次筛子记录一个点数,只有筛子点数和恰好为距离K时即成功到达终点,当没有到达终点时继续向前走,当点数和超过距离K时需要往回退超出的步数。

输入:第一行为K和N,第二行为N个筛子各自的点数;

输出:如果成功到达终点则输出字符串"paradox",如果没有则在一行输出距离终点的步长以及回退的次数。

代码如下:(AC为94%,剩下6%不知道扣在了哪里见谅)

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

void getTheIndex(int distance, int N, int* Di)
{
	if (distance <= 0 || N <= 0 || Di == nullptr)
		return;
	int sum = 0;//走的步数和
	int index = distance;//记录到达终点的距离
	int backtimes = 0;//记录后退次数
	for (int i = 0; i<N; ++i)//扫描筛子点数
	{
		sum += Di[i];
		index = distance - sum;
		if (sum == distance)
		{
			cout << "paradox" << endl;
			return;
		}
		if (sum>distance)//sum需要重新计算
		{
			++backtimes;//后退数+1
			sum = 2 * distance - sum;
			//index=distance-sum;
			index = -index;
		}
	}
	cout << index << " " << backtimes << endl;
}
int main()
{
	int K;
	int N;
	cin >> K >> N;
	int* Di = new int[N];
	for (int i = 0; i<N; ++i)
	{
		cin >> Di[i];
	}
	getTheIndex(K, N, Di);

	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值