您的位置:首页 > 编程语言

今日头条2018春季校园招聘研发岗位笔试编程题2

2018-03-25 21:35 726 查看

今日头条2018春季校园招聘研发岗位笔试编程题2

题目描述

定义两个字符串变量:s和m,再定义两种操作,

第一种操作:

    m = s;

    s = s + s;

第二种操作:

    s = s + m;

假设s, m初始化如下:

     s = “a”;

     m = s;

求最小的操作步骤数,可以将s拼接到长度等于n。

输入描述:

一个整数n,表明我们需要得到s字符串长度

对于100%的数据,0 < n < 10000
输出描述:

一个整数,表明总共操作次数
示例1

输入

6
输出

3
说明

输入是6,表明我们需要得到s字符串长度为6,也就是s最终为 “aaaaaa”,

那么依次使用2次“第一种操作”和1次“第二种操作”就能达到目的,总共操作次数是3。
示例2

输入

5
输出

4
说明

假设n=5,表明我们需要得到s字符串长度为5,也就是s最终为 “aaaaa”,

那么直接使用4次“第二种操作”就能达到目的,总共操作次数是4。
示例3

输入

4
输出

2
说明

假设n=4,表明我们需要得到s字符串长度为4,也就是s最终为 “aaaa”,

那么直接使用2次“第一种操作”就能达到目的,总共操作次数是2。
JAVA代码(AC)

package toutiao;

import java.util.*;

class Entry {
int s;
int m;

public Entry() {

}

public Entry(int s, int m) {
this.s = s;
this.m = m;
}
}

public class Main {

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
Entry init = new Entry(1, 1);
Map<Entry, Integer> map = new HashMap<Entry, Integer>();
Queue<Entry> queue = new LinkedList<Entry>();
queue.add(init);
map.put(init, 0);

while (!queue.isEmpty()) {
Entry entry = queue.poll();
if (entry.s == n) {
System.out.println(map.get(entry));
break;
}

Entry entry1 = new Entry();
entry1.m = entry.s;
entry1.s = 2 * entry.s;
queue.add(entry1);
map.put(entry1, map.get(entry) + 1);

Entry entry2 = new Entry();
entry2.m = entry.m;
entry2.s = entry.s + entry.m;
queue.add(entry2);
map.put(entry2, map.get(entry) + 1);
}
scan.close();
}

}


参考了https://blog.csdn.net/u010215313/article/details/79726370的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: