题目一: 喝可乐复制问题

有A、B、C、D四个人排成一队喝可乐,每次喝完复制自己,问数字n的人名?

import java.util.*;
public class Solution {//获得第N个人喝可乐的名字public static String  getName(int  num) {String[]str=new String[]{"A","B","C","D"};if(num>=1&&num<=4) return str[num-1];//字符串为ABCD AABBCCDD AAAABBBBCCCCDDDD ....int k=2;int sum=4;while(sum<num){k++;sum+=Math.pow(2,k);}int average=(int)Math.pow(2,k-2); //总共四份,没份的数量if(sum-num>=3*average){return str[0];}else if(sum-num>=2*average){return str[1];}else if(sum-num>=average){return str[2];}else{return str[3];}}public static void main(String[]args){// System.out.println("Hello World!");Scanner sin=new Scanner(System.in);while(sin.hasNextInt()){int N= sin.nextInt();System.out.println(getName(N));}}
}

题目二: 谁是球王

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;public class PinDuoDuo2 {public static void main(String[] args) {
//输入第一行,读取n和m
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String[] strs = s.split(" ");int n = Integer.valueOf(strs[0]);
int m = Integer.valueOf(strs[1]);
//读取投票结果,存放在一个数组中,数组中存放的是选票上的信息
String[] str = new String[m];
for (int i = 0; i < m; i++)
str[i] = in.nextLine();
// System.out.println(str.length);
//创建一个新数组,反转str,这样数组中的每一个元素都是以为球星的投票结果,并对其进行排序
String[] new_str = new String[n];for (int i = 0; i < n; i++) {
char[] c = new char[m];
for (int j = 0; j < m; j++) {
c[j] = str[j].charAt(i);
}
Arrays.sort(c);
new_str[i] = new String(c);
}// for (String s : new_str) {// System.out.println(s);
// }
//使用比较字符串的大小,判断是否存在球星,如果有最大值且大于一个,则不存在球星。
int max = 0;for (int i = 1; i < n; i++) {
if (new_str[max].compareTo(new_str[i]) > 0) {
max = i;
}
if (new_str[max].compareTo(new_str[i]) == 0) {
System.out.println("-1");
return;
}
}System.out.println(max);}}

题目三: 运货物问题

N个货物分别重W1、W2、…Wn,(100<=W<=300),一辆车可以运重量300的货,问需要多少辆车。
思路:先从小到大排序,i、j两个指针,i从0开始遍历去掉3的整数倍个100(每三个100增加一辆车),j从N-1开始去掉大于200的数(大于200的自己一辆车),i、j所指的货物若可以拼车,车数加一,i、j向中间移动,否则,车数加一,j向中间移动。

//采用排序之后双指针移动法(背包问题)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;public class PinDuoDuo3 {
public static void main(String[] args) {Scanner in = new Scanner(System.in);String s = in.nextLine();String[] str= s.split("\\s+");ArrayList<Integer> list = new ArrayList<>();for(int i=0;i<str.length;i++){list.add(Integer.valueOf(str[i]));}/* for(Integer l:list)System.out.println(l);*/Collections.sort(list);int i=0;int j=list.size()-1;int num=0;while(i<j){if(list.get(i)+list.get(j)>300){num++;j--;}if(list.get(i)+list.get(j)<=300){num++;j--;i++;}}if(i==j){num++;}System.out.println(num);
}
}

题目四: 变成靓号的最少代价

题意简单,号码长度为n,每个数字范围是0-9,同样的数字的个数大于等于k,则为靓号,找出成本最小且字典序最小的靓号。
代码如下,因为是最后一道,写的有些仓促,代码有点不忍直视。主要思路就是首先用number数组记录每个数字出现的次数,然后遍历10种可能,就是将每个数字为靓号,共10种可能。用anscost和ansstr记录结果,然后每个数字比较字典序。重点在于如何修改,才能使得成本最低。
比如,对于要使得7的个数大于等于k,那么首先进行广度优先遍历,dif = 1..9,即往7的左右两边遍历,显然先替换大于7的会使得字典序更小,因此先7+dif,再计算7-dif,直到数字7的个数==k,然后记录原号码中每个数字中有多少个数要替换为7。然后从左往右替换大于7的数字,
再从右往左替换小于7的数字即可。

#include<iostream>
#include<queue>
#include<string>
#include<algorithm>
#include<sstream>
using namespace std;
int main(){vector<int> number(10, 0);vector<int> times(10, 0);string ansstr;
int ansi;
int n, k;
int anscost = -1;
string str;
bool flag = false;
cin>>n>>k;
char c;
for(int i = 0; i < n; i++){
cin>>c;
str.push_back(c);
number[c-'0']++;
if(number[c-'0'] >= k){
flag = true;
}
}
if(flag) cout<<str<<endl;
else{
for(int i = 0; i <= 9; i++){
for(int ii = 0; ii <= 9; ii++) times[ii] = 0;
if(number[i] == 0) continue;
int tmpcost = 0;
int t = number[i];
int dif = 1;
while(t < k){
if(i+dif <= 9){
if(number[i+dif] + t >= k){
times[i+dif] = k-t;
tmpcost += (dif)*(k-t);
break;
}
else{
times[i+dif] = number[i+dif];
tmpcost += (dif)*number[i+dif];
t += number[i+dif];
}
}
if(i-dif >= 0){
if(number[i-dif] + t >= k){
times[i-dif] = k-t;
tmpcost += dif*(k-t);
break;
}
else{
times[i-dif] = number[i-dif];
tmpcost += number[i-dif];
t += number[i-dif];
}
}
dif++;
}
string sstr(str);
for(int j = 0; j < sstr.size(); j++){
int ttt = sstr[j]-'0';
if(sstr[j]-'0' > i && times[(int)(sstr[j]-'0')] > 0){
times[ttt] = times[(int)(sstr[j]-'0')]- 1;
sstr[j] = '0'+i;
}
}
cout<<"  "<<endl;
for(int j = sstr.size()-1; j >= 0; j--){
if(sstr[j]-'0' < i && times[(int)(sstr[j]-'0')] > 0){
times[(int)(sstr[j]-'0')]--;
sstr[j] = '0'+i;
}
}
if(anscost == -1){
anscost = tmpcost;
ansi = i;
ansstr = sstr;
}
else if(anscost > tmpcost){
ansi = i;
anscost = tmpcost;
ansstr = sstr;}
else if(anscost == tmpcost){
anscost = tmpcost;
if(ansstr > sstr){
ansi = i;
ansstr = sstr;
}
}
}
cout<<anscost<<endl;
cout<<ansstr<<endl;
}}

拼多多2018年秋招提前批相关推荐

  1. 平安银行薪资职级表_秋招提前批!平安银行总行公告发布!薪资拿到手软~

    扫码立刻加入银行秋招备考群 后台福利 回复 春招考题 领取 60页历年考题+考情分析回复 易错题 领取 银行考试易错600题回复 20家 领取 20家银行考试试卷回复 入行包 领取 20云南银行13家 ...

  2. 远景(智能/能源/动力)2023秋招提前批!内推啦

    [内推方式]: 点击下面官方网站链接投递: https://app.mokahr.com/recommendation-apply/envisiongroup/43124?recommendCode= ...

  3. 阿里面试其实也没想象中的那么难,秋招提前批4面拿到21K

    前言 大概早上9点左右,收到了阿里面试官小姐姐的电话,声音很好听...跟她约了晚上9点的电话面..然后一整天上班不在状态,开始各种回顾之前准备的知识.为了这次面试大概准备了半个月,利用每天下班到家8点 ...

  4. 【2021】联易融秋招提前批Java后端面经(已OC)

    6.21 一面(2个面试官) 1.自我介绍? 2.设计模式中的六大原则,项目中使用到的设计模式? 3.Spring事务传播机制,隔离级别? 4.A方法有事务,B方法也有事务,A方法中调用B方法过程? ...

  5. 37互娱,2019秋招提前批,web后端工程师

    1.IPV6多少位 IPV4为32位.IPV6为128位 IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为"互联网协议&qu ...

  6. 37互娱,2019秋招提前批,Java

    1.以下哪个是原子操作 A.x = 10 B.y = x C.x++ D.x = x + 1 前三个都至少需要先读取,再操作,非原子操作.而D的话,直接赋值. "原子操作(atomic op ...

  7. 37互娱,2019秋招提前批,Java服务端一面

    1.netty的了解 2.说一下java里的一些数据结构 3.hashmap默认容量,arraylist默认容量,hashmap怎么解决冲突 4.tcp,udp,滑动窗口 5.mysql存储过程 6. ...

  8. 37互娱,2019秋招提前批,Java服务端二面

    1.项目 2.学校有哪些课程,平时怎么学习 3.java多线程 4.java集合类,currentmap 5.java虚拟机 6.垃圾回收 7.io和nio 没有什么具体的问题,给个主题,然后自己说- ...

  9. 网易游戏_互娱_游戏测试秋招提前批

    一面,面试时长接近一个小时 ,后面面试记录我只回忆了我面试时答得不是很好的部分. 1.实习项目 a.性能测试 https://www.cnblogs.com/puresoul/p/5456855.ht ...

最新文章

  1. 零基础可以学好UI设计吗
  2. MIT一招霸气颠覆传统:勇敢换导师,成本我买单,学生沸腾了
  3. 网站制作与运营离不开几个重要部分
  4. 798B. Mike and strings
  5. 任务、进程、线程之间的区别
  6. postman工具 如何传递当前时间戳和MD5加密
  7. USB转RS232驱动怎么安装?
  8. smobiler中实现页面切换_.Net语言Smobiler开发之如何在手机上实现表单设计
  9. 最新数据:中国一二三四五线城市排名出炉!
  10. fastapi+tortoise单元测试
  11. Windows PE文件各个节(Section)分析
  12. DOM控制video实现开始/暂停按钮思路方法
  13. 十年总结(15):产品化-有心杀敌,无力回天
  14. [2]_如何与老板顺畅沟通
  15. 微信小程序的开发制作_搭建_工具_模板_一键生成
  16. 把Excel批注的“红三角”放在单元格左上角_干货!《跟王佩丰学Excel教程》笔记...
  17. 一个系列搞懂Mysql数据库12:从实践sql语句优化开始
  18. android 指定区域内绘制,Android实现扫一扫功能之绘制指定区域透明区域
  19. 数据库安全性控制(授权:授予与收回)
  20. MyHome3D在线装修设计软件测评

热门文章

  1. vue的跳转(打开新页面)
  2. Photoshop操作总结(一)
  3. Linux7删除lv,LV扩展,LVM卸载
  4. C++ 读取asar中的文件
  5. 【最大子区间和】打水漂 rqnoj145
  6. 查看进程启动时间 linux,Linux详细查看进程启动时间
  7. 【微信小程序 | 实战开发】常用小程序框架介绍
  8. 北京丰面颊多长时间能恢复【咨询脂肪专家王明利博士】
  9. 悟空CRM 5.0 升级发布
  10. vue3和vite安装