华为机试笔记

2016.8.3

Paste_Image.png

import java.util.Scanner;
public class test {

public static void main(String args[]){
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int result=0;
    int[] a = new int[n];
    int sum =0;
    for(int i= 0; i<n; i++){
        a[i]= in.nextInt();
    }
    if(n==1)
    {
         result=a[0];
    }
    while(n>1)
    {
        int index=findmin(a,n);
        if(index==n-1){
         result+=a[index]+a[0];
         a[0]=a[index]+a[0];
        }
        else{
            result+=a[index]+a[index+1];
            //数组向前删除index+1这个元素
            a[index]=a[index]+a[index+1];
            for(int i=index+2;i<n;i++)
            {
                a[i-1]=a[i];
            }
        }
        n--;
    }
    System.out.print(result);

}
//坐标加后面值最小,就返回最小值
public static int findmin(int a[],int n)
{
    int temp=a[n-1]+a[0],index=n-1;
    for(int i=0;i<n-1;i++)
    {
        if((a[i]+a[i+1])<temp){
            temp=a[i]+a[i+1];
            index=i;}
    }
    if(a[n-1]+a[0]<temp)
    {
        temp=a[0]+a[n-1];
    index=n-1;}
    return index;
}

}

踩过的坑

要找队列中最大值,那么最开始的temp就要赋为一个特别大的值,如果temp=0,然后找又比这个小的,就替换,根本替换不到好吗;temp初始化时谁的值,index也要改为对应的,要不然temp不被替换,返回的应该也是对的index。

这是循环队列,因此最后一个元素要特殊处理。不同的地方有:删除时,不需要后面元素移动,直接n--就行,还有,尾部的下个元素不是i+1,而是0;其他的是一样的,别忘记了,一样要把两个元素求和赋值给前一个元素。还有很特殊的情况,如果只有1个元素的话要特殊处理。

上面的代码属于中规中矩型,也可以用动态规划这种高大上的代码,参考
其他人的代码

Paste_Image.png

public class test {

public static void main(String args[]){
    Scanner in = new Scanner(System.in);
    String s = in.nextLine();
    int count =0;
    String result="";
    String []strs=strs=s.split(" ");
    for(int i=0;i<strs.length;i++){
        int num=Integer.valueOf(strs[i]);
        strs[i]=Integer.toBinaryString(num);
        if(strs[i].length()<3)
        {
            result=result+0+" ";
        }
        else if (strs[i].length()==3) {
            result=result+0+" ";
        }else
            result=result+strs[i].subSequence(strs[i].length()-3, strs[i].length()-2)+" ";
    }   
    System.out.printf(result.substring(0, result.length()-1));
}   

}

踩的坑

● 输入一行数字,空格分开,但是没有指定数字个数

Scanner in = new Scanner(System.in);
String s = in.nextLine();
String []strs=strs=s.split(" ");

● 字符串截取函数subsequence(字符起始位值,终止位置)不包含终止位置

● 整形数值十进制、二进制之间转换

java进制转换。java中进行二进制,八进制,十六进制,十进制间进行相互转换

十进制转成十六进制:
Integer.toHexString(int i)

十进制转成八进制
Integer.toOctalString(int i)

十进制转成二进制
Integer.toBinaryString(int i)

十六进制转成十进制
Integer.valueOf("FFFF",16).toString()

八进制转成十进制
Integer.valueOf("876",8).toString()

二进制转十进制
Integer.valueOf("0101",2).toString()

或者利用位运算

initpintu_副本.jpg

没写

2016.8.10

找零

package datapreprocess;
import java.util.Scanner;
public class findMoney {

/**
 * @param args
 */
static int [] money=new int[7];
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in=new Scanner(System.in);
    int a;
    //java初始化一个数组
    money[0]=1;
    money[1]=2;
    money[2]=5;
    money[3]=10;
    money[4]=20;
    money[5]=50;
    money[6]=100;
    while(( a=in.nextInt())!=0)
    {
        for(int i=6;i>=0;i--)
        {
            if(money[i]<=a)
            {
                int result=changemoney(a,i);
                System.out.println(result);
                break;}//if
        }//for
    }//while
}
static public int changemoney(int a,int i)
{
    if(i==0||a==1)
    {
        return 1;
    }
    else if(i<0||a<0){
        return 0;
    }
    else {
        return changemoney(a-money[i], i)+changemoney(a, i-1);
    }
}

}
踩的坑:1.把问题想请,想就去做,递归实现时注意结束条件2.java初始化一个数组的方法,不能在声明的时候就赋值吗?

大数求和

package datapreprocess;
import java.util.Scanner;
public class BigdataSum{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
//java初始化一个数组
String a=new String();
String b=new String();
a=in.nextLine();
b=in.nextLine();
int length=a.length()>b.length()?a.length():b.length();
int[] a1=new int[length+1];
int[] b1=new int[length+1];
int[] result=new int[length+1];
int[] jw=new int[100];
for(int i=a.length()-1;i>=0;i--)
{
a1[a.length()-1-i]=a.charAt(i)-48;
}
a1[a.length()]=0;
for(int i=b.length()-1;i>=0;i--)
{
b1[b.length()-1-i]=b.charAt(i)-48;;
}
b1[b.length()]=0;
jw[0]=0;
for(int i=0;i<length+1;i++)
{
int c=a1[i]+b1[i]+jw[i];
jw[i+1]=c/10;
result[i]=c%10;
}//while
int i;
if(result[length]==0)
i=length-1;
else
i=length;
for(;i>=0;i--)
{
System.out.print(result[i]);
}
}
}
踩的坑:1)初始化两个整形数组的时候,要按最长的数组长度来初始化,并且还得+1,这样,就算一长一短的话也得有的加,就算最高位进位了,也有得加。2)在输出时注意,如果最高位是0 的话,就代表没有进位,可以不用输出,2)直接把一个字符型的数赋值给整形,是把ASCII码给整形的,所以还要再减48.

还可以用java中自带的BigInteger类型
while (in.hasNext())
{
a=in.nextBigInteger();
b=in.nextBigInteger();
System.out.print(a.add(b));
}

火车进站

8.16

Paste_Image.png

{

public static void main(String args[]){
    Scanner in = new Scanner(System.in);
    String a=in.nextLine();
    char[] strs=new char [a.length()];
    strs=a.toCharArray();
    char front=strs[0];
    int count=1;
    for(int i=1;i<a.length();i++)
    {
        if(strs[i]>='A'&&strs[i]<='Z')
        {
            if(front==strs[i])
                count++;
            else {
                System.out.print(front+""+count);
                front=strs[i];
                count=1;
            }
        }
        else {
            continue;
        }
    }
    System.out.print(front+""+count);
}

}
判断一个字符是字母,用a>='A'&&a<='Z';在输出的时候,一个字符加一个数字会被变成ASCII码相加。
import java.util.Scanner;
public class Test2 {

 public static void main(String[] args)
 {
     Scanner in=new Scanner(System.in);
     String a=new String();
     for(int i=0;i<3;i++)
     {
         for(int j=0;j<3;j++)
         { int k=in.nextInt();
             if(i>j)
                 a+=k;
             else
                 a+="0";
         }
     }
     System.out.print(a);
 }

}
坑:不一定要写成要求的函数体,只要输出正确即可。千万别条件判断再输入,先输入在条件判断

Paste_Image.png
Paste_Image.png

几种常见的输入输出方式

  • 多行输入的话,每行只有一个数字。hasnext()判断是否有下一个元素;hasNextInt()判断是否有数字。
  • 多行输入,每行有一组数字。
  • 大整数 BigInteger,BigDecimal。
  • 输出:
    System.out.printf("格式",i);格式有:"输出一个浮点数:%+9.2f(输出长度为9.带2位小数),一个整数:%d,%x(16进制),%o(8进制),一个字符串:%s"。
    将字符串转换成字符数组,String st = "abcdefg";char[] ch;ch = st.toCharArray();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,719评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,565评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139
  • 《诗》云:“邦畿千里,惟民所止。”《诗》云:“缗蛮黄鸟,止于丘隅。”子曰:“于止,知其所止,可以人而不如鸟乎?” ...
    在山塾阅读 554评论 1 5
  • mongodb的安装 官网: https://www.mongodb.com/download-center?jm...
    月芽儿爸爸阅读 169评论 0 0