【牛客网 2017年校招模拟笔试(第一场)】 序列和

2024-06-23 07:58

本文主要是介绍【牛客网 2017年校招模拟笔试(第一场)】 序列和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求序列和

描述

我们要找连续的一段长度大于等于L小于等于100整数和等于N,容易观察到合法的长度范围很小,于是我们从L开始枚举,然后找到第一个输出即可。

我的代码

最初提交了一次代码,用vector保存了所有满足条件的序列,输出长度最小的,提交之后说内存超出限制,看了一眼题目,发现内存貌似是限制在2w多k?伤心,之前做题没遇到过内存还有这么严格的限制。
修改了一下,其实这个代码并没有成功提交所以不知道最终是否符合条件。仍旧是用深搜。

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <string>
using namespace std;int a;
int sum,L;
int minLen=101;
int flag=0;
string anss;void dfs(string s, int str, int n, int len)
{if (n==0 && len<=0){if (s.size()<minLen){anss=s;flag=1;}   return ;}else if (n<0){return ;}char c=str;dfs(s+c,str+1,n-str, len-1);return ;
}int main()
{int i;scanf("%d%d",&sum,&L);int n=sum;  for(i=1; i<sum; i++)dfs("",i,n,L);int min_ind=-1;if (!flag){printf("No\n");}else{int len=anss.size();for (i=0; i<len; i++){printf("%d",anss[i]);if (i<len-1) printf(" ");}printf("\n");}return 0;
}

分析

后来看了一眼牛客网上大牛写的代码真的超级简单啊,我又想复杂了。
假定连续序列起始数为A,则长度为len的连续序列之和为(A+A+len-1)*len/2,如果令:
(A+A+len-1)*len/2=sum
则可得:A=sum-(Len-1)*len/2


贴上大牛代码如下:
作者:NotDeep
链接:https://www.nowcoder.com/discuss/21599
来源:牛客网


#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <string>using namespace std;vector <int> sequence(int S, int L0) {vector<int> R;for(int L = L0; L <= 100; L++) {if (S - L * (L - 1) / 2 >= 0 && (S - L * (L - 1) / 2) % L == 0) {int A = (S - L * (L - 1) / 2) / L;for (int i = 0; i < L; i++) R.push_back(A + i);return R;}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }return R;
}
int main() {int S,L;cin >> S >> L;vector<int> ans;ans = sequence(S, L);if(ans.size() == 0) cout << "No" << endl;else {for(int i = 0; i < ans.size(); i++) {i == 0 ? cout << ans[i] : cout << " " << ans[i];}}return 0;
}

这篇关于【牛客网 2017年校招模拟笔试(第一场)】 序列和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086577

相关文章

嵌入式软件常见的笔试题(c)

找工作的事情告一段落,现在把一些公司常见的笔试题型整理一下,本人主要是找嵌入式软件方面的工作,笔试的也主要是C语言、数据结构,大体上都比较基础,但是得早作准备,才会占得先机。   1:整型数求反 2:字符串求反,字符串加密,越界问题 3:字符串逆序,两端对调;字符串逆序,指针法 4:递归求n! 5:不用库函数,比较两个字符串的大小 6:求0-3000中含有9和2的全部数之和 7

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

基于 Java 实现的智能客服聊天工具模拟场景

服务端代码 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Serv

代码随想录——摆动序列(Leetcode376)

题目链接 贪心 class Solution {public int wiggleMaxLength(int[] nums) {if(nums.length <= 1){return nums.length;}// 当前一对差值int cur = 0;// 前一对差值int pre = 0;// 峰值个数int res = 1;for(int i = 0; i < nums.length -

想让Python序列切片更高效?这些技巧你不可不知!

目录 1、自定义类实现切片 🍏 1.1 实现__getitem__方法 1.2 支持正负索引与步长 2、利用 collections.abc 模块 🧠 2.1 继承MutableSequence类 2.2 重写关键方法 3、使用标准库itertools.slice 🍲 3.1 itertools工具介绍 3.2 slice函数应用实例 4、通过生成器实现动态切片 🌀

最长考拉兹序列

题目:  考虑如下定义在正整数集上的迭代规则:  n    n/2 (若n为偶数) n    3n+1 (若n为奇数) 从13开始,可以迭代生成如下的序列:         13  40  20  10  5  16  8  4  2  1 可以看出这个序列(从13开始到1结束)共有10项。 尽管还未被证明,但普遍认为,从任何数开始最终都能抵达1并结束, 这被称为 “考拉兹序列”。

leetcode刷题(97)——106. 从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3/ \9 20/ \15 7 看下后序和中序遍历的框架: void traverse(TreeNode root) {trave

leetcode刷题(97)——105. 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7 1.先回顾前序遍历和中序遍历的框架: void traverse(TreeNode root) {//

价格减免(Lc2288)——模拟

句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 '$' 。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个 价格 。 例如 "$100"、"$23" 和 "$6" 表示价格,而 "100"、"$" 和 "$1e5 不是。 给你一个字符串 sentence 表示一个句子和一个整数 discount 。对于每个表示价格的单

模拟木马程序自动运行:Linux下的隐蔽攻击技术

模拟木马程序自动运行:Linux下的隐蔽攻击技术 在网络安全领域,木马程序是一种常见的恶意软件,它能够悄无声息地在受害者的系统中建立后门,为攻击者提供远程访问权限。本文将探讨攻击者如何在Linux系统中模拟木马程序的自动运行,以及他们可能使用的技术手段。 木马自动运行的常见方法 攻击者通常会使用以下几种方法来确保木马在Linux系统中自动运行: 计划任务(Crontab): 攻击者可以通