2018腾讯实习招聘笔试编程题之翻转数列
题目描述:小Q定义了一种数列称为翻转数列
给定整数n和m,满足n能被2m整除。对于一串连续递增整数数列1,2,3,4...,每隔m个符号翻转一次,最初符号为'-'
例如n=8, m=2,数列就是-1,-2,+3,+4,-5,-6,+7,+8.
而n=4, m=1,数列就是-1,+2,-3,+4.
小Q现在希望你能帮他算算前n项和为多少。
输入描述:输入包括两个整数n和m(2 <= n <= 10^9,1 <= m),并且满足n能被2m整除。
输出描述:输出一个整数,表示前n项和。
示例:输入 8 2
输出 8
package com.study;import java.util.Scanner;/**
* @author ZhaoFang
* @date 2018年4月5日 下午4:45:10 (腾讯2018实习招聘笔试编程)
* @describe 翻转数列:小Q定义了一种数列称为翻转数列
* 给定整数n和m,满足n能被2m整除。对于一串连续递增整数数列1,2,3,4...,每隔m个符号翻转一次,最初符号为'-'。
* 例如n=8, m=2,数列就是-1,-2,+3,+4,-5,-6,+7,+8.
* 而n=4, m=1,数列就是-1,+2,-3,+4.
* 小Q现在希望你能帮他算算前n项和为多少。
* 输入描述:输入包括两个整数n和m(2 <= n <= 10^9,1 <= m),并且满足n能被2m整除。
* 输出描述:输出一个整数,表示前n项和。
* 示例:输入 8 2 输出 8
*/
public class Tencent1 {public static void main(String[] args) {Scanner in = new Scanner(System.in);Tencent1 obj = new Tencent1();while(in.hasNext()) {int n = in.nextInt();int m = in.nextInt();if(n < 2 || n > 1000000000 || m < 1 || n % m*2 != 0) {System.out.println("n, m 不符合要求,请重新输入...");}else {//方法一:先求数列再求和int[] array = obj.FanZhuan(n, m);System.out.println("翻转数列前n项的和为:" + obj.Sum(array));//方法二:直接法System.out.println(obj.DirectSum(n, m));break;}}}/*** 直接求和* @param n* @param m* @return*/public int DirectSum(int n, int m){int sum = 0;int i = 1;boolean flag = false;while(i < n) {if(!flag) {for(int j = 0; j < m; j++) {sum = sum -i - j;}}else {for(int j = 0; j < m; j++) {sum = sum + i + j;}}i += m;flag = !flag;}return sum;}/*** 由题意求得的翻转数列* @param n* @param m* @return*/public int[] FanZhuan(int n, int m) {int[] array = new int[n];int total = n/m; //总共有多少轮int j = 1;for(int i = 0; i < n;) {if(j <= total) {if(IsOdd(j)) {//j为奇数,数列的项为负;j为偶数,数列的项为正array[i] = -(i+1);i++;}else{array[i] = (i+1);i++;}if(i % m == 0) {//若i为m的倍数,则j需加1,数列的项需改变符号j++;}}}return array;}/*** 是否为奇数* @param num* @return 若为奇数,返回true;否则false*/public boolean IsOdd(int num) {boolean flag;if(num % 2 == 0){flag = false;}else {flag = true;}return flag;} public int Sum(int[] array) {int result = 0;for(int i = 0; i < array.length; i++) {result += array[i];}return result;}}
2018腾讯实习招聘笔试编程题之翻转数列相关推荐
- 2018腾讯实习招聘笔试编程题之安排机器
题目描述:小Q的公司最近接到m个任务,第i个任务需要Xi的时间去完成,难度等级为yi. 小Q拥有n台机器,每台机器最长工作时间zi,机器等级wi. ...
- 2018年科大讯飞春招笔试编程题
科大讯飞2018春招的笔试编程题中,第一题是判断蚊子是否在蚊帐中,比较简单,这里不做说明,本文将简单讲解第二题和重点说明第三题的解法. 第二题 1.题目 2.输入输出及样例 3.思路 这题思路很容易想 ...
- 京东2016春招(实习)笔试+编程题
岗位:数据挖掘.机器学习.算法.模式识别 京东这套题出的耗时可以的,难度不是特别大,编程题感觉非常难理解,光看题干就看了老半天,当时简直吓尿了,一琢磨其实很简单.我只能回忆一部分内容,25选择+2编程 ...
- 奇虎360_2017校园招聘笔试编程题第一题
今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第一题. 1. 题目 2. 输入输出及样例 3. 我的思路 这题应该看题目理解一下就有思路,最简单粗暴的就是创建一个二维数组in ...
- 奇虎360_2017校园招聘笔试编程题第二题
今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第二题.第二道题也不难想到思路,但是如果写法不当,可能无法满足题目的时间限制. 1. 题目 2. 输入输出及样例 3. 我的思路 ...
- 商汤科技 2019校园招聘笔试编程题-2018.09.07
本来阿里和商汤冲突了,就放弃了阿里的劝退型笔试,结果,商汤也劝退,只发一下题目做参考吧!知道题解的同学可以在评论区粘上链接,我会随时更新并加以感谢的.
- 滴滴 2019校园招聘笔试编程题-2018.09.18
输入: slep slap sleep step shoe shop snap slep 输出: slep slap step 代码是交卷后写出来的,没有经过测试,不知道是否能够AC 利用DP求出每个 ...
- 科大讯飞2018暑期实习招聘在线编程题:如何分糖果?
题目描述:小明和小红是好朋友,但最近遇到一个棘手的问题,有一盒糖果要分成两份但是每颗糖果质量都不尽相同,但为了分配的公平每份糖的糖果数量相差不得超过1,在此条件下两份糖果的质量差距尽可能小. 输入:一 ...
- 奇虎360 2015校园招聘笔试编程题
题目一: 写一个函数,根据两文件的绝对路径算出相对路径. 如a="/qihoo/app/a/b/c/d/new.c",b="/qihoo/app/1/2/test.c&q ...
最新文章
- js 倒计时 时间戳
- 云信技术系列课 | RTC 系统音频弱网对抗技术发展与实践
- java学习笔记之条件语句(if...else)
- Jfinal源码解析系列一
- java在线编辑器_微软开源在线代码编辑器——Monaco Editor
- matplotlib绘制平滑曲线
- ESP8266 wifi钓鱼
- 七月算法机器学习2 数理统计与参数估计1
- .NET core ABP 获取远程IP地址
- ActivityGroup详解
- 【单片机】keil 2032
- 振铃效应与样点自适应补偿(Sample Adaptive Offset,SAO)技术
- Algorithm Review 5 图论
- java计算机毕业设计直播购物平台源码+数据库+系统+lw文档
- 鹰眼系统原理_飞思卡尔智能车一:山外鹰眼摄像头使用原理
- 如何使用Keras fit和fit_generator(动手教程)
- 模仿京东登录页面(HTML、CSS、JavaScript / jQuery)
- Docker 命令基础及进阶
- 总问南京配眼镜哪里性价比高,不妨看南京眼镜店推荐榜单
- 史上最全Apidoc文档生成详解