精华内容
下载资源
问答
  • 华为机试

    2021-03-10 21:46:01
    数组 句子逆序 矩阵乘法 ...

     

     

                                                                                                                               数组

         
    句子逆序                                                                                 矩阵乘法                                                                           整形数组合并
         
       
       
       

     

    展开全文
  • 奇怪思路是对的,就是没通过 #include<iostream> #include<string> #include<algorithm> #include<vector> #include<map> #include<set> #include<......

    第一题比较简单ac。
    第二题:太可惜了,一个小细节int类型的决定了成败。

    1. 其实当时我自己没注意这个细节,因为调用sqrt的时候,本地ide报错返回int不匹配,我当时怎么就想都不想把sqrt强制转换为int呢。
    2. 本题给的测试用例也太巧的避免这个问题。

    奇怪思路是对的,就是没通过。。。。。。。。。
    第二题小蜜蜂采蜜,题目要求最终结果转int 我把每一段转int了,导致通过率一直为0,看到别人说才知道原因。难受香菇,怪我没读清楚题目咯,为什么不是全double,全int
    太坑了!!!

    
    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<sstream>
    #include<assert.h>
    #include<math.h>
    
    using namespace std;
    
    //int TwopointSum(pair<int, int>a, pair<int, int> b)
    //{
    //	return int(sqrt((b.first - a.first)*(b.first - a.first) + (b.second - //a.second)*(b.second - a.second)));
    //}
    double TwopointSum(pair<int, int>a, pair<int, int> b)
    {
    	return double(sqrt((b.first - a.first)*(b.first - a.first) + (b.second - a.second)*(b.second - a.second)));
    }
    //一个排列的总和
    int OneofSum(vector<pair<int, int>>Input)
    {
    
    	int sum = 0; sum += TwopointSum(make_pair(0, 0), Input[0]);
    	for (int i = 0; i <4; i++)
    		sum += TwopointSum(Input[i], Input[i + 1]);
    
    	sum += TwopointSum(make_pair(0, 0), Input[4]);
    	return sum;
    }
    //全排列
    void swap0(vector<pair<int, int>>&Input, int i, int j)
    {
    	swap(Input[i].first, Input[j].first);
    	swap(Input[i].second, Input[j].second);
    }
    void  Permute(vector<pair<int, int>>&Input, int start, int &min){
    	if (start >= 5)
    	{
    		if (min > OneofSum(Input))
    			min = OneofSum(Input);		 
    	}
    
    	for (int i = start; i <5; i++)
    	{
    		swap0(Input, i, start);
    		Permute(Input, start + 1, min);
    		swap0(Input, i, start);
    	}
    
    }
    int main(){
    	 
    	vector<pair<int, int>>Input(5);
    	for (int i = 0; i < 5; i++)
    	{
    		cin >> Input[i].first >> Input[i].second;
    	}
    	int min = 100000000000;
    	Permute(Input, 0, min);
    	cout << min << endl;
    
     
    	return 0;
    }
    //200 0 200 10 200 50 200 30 200 25
    
    展开全文
  • 2016.8.3Paste_Image.pngimport 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];...

    2016.8.3

    d6281e1c7c81

    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

    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

    {

    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

    {

    if((a[i]+a[i+1])

    temp=a[i]+a[i+1];

    index=i;}

    }

    if(a[n-1]+a[0]

    {

    temp=a[0]+a[n-1];

    index=n-1;}

    return index;

    }

    }

    踩过的坑

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

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

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

    其他人的代码

    d6281e1c7c81

    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

    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()

    或者利用位运算

    d6281e1c7c81

    initpintu_副本.jpg

    没写

    2016.8.10

    d6281e1c7c81

    找零

    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初始化一个数组的方法,不能在声明的时候就赋值吗?

    d6281e1c7c81

    大数求和

    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

    {

    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));

    }

    d6281e1c7c81

    火车进站

    8.16

    d6281e1c7c81

    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

    {

    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);

    }

    }

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

    d6281e1c7c81

    d6281e1c7c81

    Paste_Image.png

    d6281e1c7c81

    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();

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,761
精华内容 2,304
关键字:

华为机试