华为机试专辑【1-5题】

xiaoxiao2021-02-28  111

题目描述 计算字符串最后一个单词的长度,单词以空格隔开。 输入描述: 一行字符串,非空,长度小于5000。 输出描述: 整数N,最后一个单词的长度。 输入例子: hello world 输出例子: 5 方法一

#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 5005; /** 假设至少有两个单词, 一个空格! 思路:right指向右边第一个非' '字符left指向right左边第一个空格 **/ int main() { char str[maxn]; gets(str); int len = strlen(str); int left, right; bool isFirst = true; for(int i = len-1; i >= 0; i--) { if(str[i] != ' ' && isFirst) { isFirst = false; right = i; } else if(str[i] == ' ' && !isFirst) { left = i; break; } } printf("%d\n", right - left); return 0; }

方法二

#include<iostream> #include<string> #include<vector> using namespace std; int main(){ string input; vector<string> arr; while(cin>>input) { arr.push_back(input); } cout << arr[arr.size()-1].length() << endl; }

方法三

输入流直接会记录最后一个字符串,因为单词之间是用空格隔开的 #include<iostream> #include<string> #include<vector> using namespace std; int main(){ string input; vector<string> arr; while(cin>>input); cout << input.size() << endl; }

方法四

//假设没有以空格结尾的字符串! #include<iostream> #include<string> using namespace std; int main(){ string input; getline(cin, input); cout << input.length()- input.find_last_of(' ') - 1 << endl; }

方法五

import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String mystrString = scanner.nextLine(); String arrayString[] = mystrString.split(" "); System.out.println(arrayString[arrayString.length-1].length()); } }

题目: 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。 输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符。 输出描述: 输出输入字符串中含有该字符的个数。 输入例子: ABCDEF A 输出例子: 1

import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String myString = scanner.nextLine(); String mychar = scanner.nextLine(); mychar = mychar.toLowerCase(); myString = myString.toLowerCase(); int cnt = 0; for(int i = 0; i < myString.length(); i++) { if( myString.charAt(i) == mychar.charAt(0) ) { cnt++; } } System.out.println(cnt); } public static void println(String str) { System.out.println(str); } } #include<iostream> #include<string> using namespace std; void tolowerCase(string &str); int main() { string myString; string ch; getline(cin, myString); getline(cin, ch); tolowerCase(myString); tolowerCase(ch); int cnt = 0; for(unsigned i = 0; i < myString.length(); i++) { if(myString[i] == ch[0]) { cnt++; } } cout << cnt << endl; return 0; } void tolowerCase(string &str) { for(unsigned i = 0; i < str.length(); i++) { if(str[i]>= 'A' && str[i] <= 'Z') { str[i] = str[i] + 'a'-'A'; } } }

题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。 Input Param n 输入随机数的个数 inputArray n个随机整数组成的数组

Return Value OutputArray 输出处理后的随机整数 注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。 输入描述: 输入多行,先输入随机整数的个数,再输入相应个数的整数 输出描述: 返回多行,处理后的结果 输入例子: 11 10 20 40 32 67 40 20 89 300 400 15 输出例子: 10 15 20 32 40 67 89 300 400 方法一:利用vector

/** 注:unique函数功能是去除相邻的重复元素,注意是相邻,所以必须先使用sort函数。 还有一个容易忽视的特性是它并不真正把重复的元素删除。 之所以说比不真正把重复的元素删除, 因为unique实际上并没有删除任何元素,而是将无重复的元素复制到序列的前段, 从而覆盖相邻的重复元素。 unique返回的迭代器指向超出无重复的元素范围末端的下一个位置。 **/ #include<iostream> #include<string> #include <algorithm> #include <vector> #include <cstdio> using namespace std; int main() { vector<int> V; int num; while(scanf("%d", &num) != EOF) { int input; V.clear(); for(int i = 0; i < num; i++) { scanf("%d", &input); V.push_back(input); } sort(V.begin(), V.end()); vector<int>::iterator iter = unique(V.begin(),V.end()); V.erase(iter, V.end()); for(unsigned i = 0; i < V.size(); i++) { printf("%d\n", V[i]); } } return 0; }

方法二:利用set集合

#include<iostream> #include<string> #include <algorithm> #include <set> #include <cstdio> using namespace std; int main() { set<int> mySet; int num; while(scanf("%d", &num) != EOF) { int input; mySet.clear(); for(int i = 0; i < num; i++) { scanf("%d", &input); mySet.insert(input); } for(set<int>::iterator it = mySet.begin(); it != mySet.end(); it++) { printf("%d\n", *it); } } return 0; }

方法三:TreeSet

import java.util.Scanner; import java.util.TreeSet; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { int num = scanner.nextInt(); TreeSet<Integer> mySet = new TreeSet<Integer>(); for(int i = 0; i < num; i++) { int input = scanner.nextInt(); mySet.add(input); } for(int k : mySet) { System.out.println(k); } } } }

题目描述 •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 输入例子: abc 123456789 输出例子: abc00000 12345678 90000000

/* 截取子串 str.substr(pos, n) 截取str中从pos开始(包括0)的n个字符的子串,并返回 str.substr(pos) 截取str中从从pos开始(包括0)到末尾的所有字符的子串,并返回 */ #include<iostream> #include<string> #include <algorithm> #include <set> #include <cstdio> using namespace std; void work(string &str); int main() { string strA, strB; getline(cin, strA); getline(cin, strB); work(strA); work(strB); return 0; } void work(string &str) { if(str.length() == 0) { return; } int cnt = str.length()/8; int mod = str.length()%8; int left = 0; while(cnt >= 1) { cout << str.substr(left, 8) << endl; left += 8; cnt--; } if(mod >= 1) { int remain = 8 - mod; int beginIndex = (str.length()/8) * 8; cout << str.substr(beginIndex, mod); for(int i = 0; i < remain; i++) { cout << "0"; } cout << endl; } } import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String strA = scanner.nextLine(); String strB = scanner.nextLine(); work(strA); work(strB); } public static void work(String str) { if(str.length() == 0) return; int cnt = str.length()/8; int mod = str.length()%8; int left = 0; int right = 8; while(cnt >= 1) { System.out.println(str.substring(left, right)); cnt--; left += 8; right += 8; } if(mod >= 1) { int remain = 8 - mod; int beginIndex = (str.length()/8) * 8; System.out.print(str.substring(beginIndex, str.length())); for(int i = 0; i < remain; i++) { System.out.print("0"); } System.out.println(); } } }

题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串。 输出描述: 输出该数值的十进制字符串。 输入例子: 0xA 输出例子: 10

#include<iostream> #include<string> #include <algorithm> #include <set> #include <cstdio> using namespace std; int main() { int input; while(cin >> hex >> input) { cout << input << endl; } } /* 16进制输入: 16进制输出:cout << hex << input << endl; 8进制输入:cin >> oct >> input 8进制输出: cout << oct << input << endl; Hexadecimal, Octal number system */ import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { String str = scanner.nextLine(); String subString = str.substring(2); System.out.println(Integer.parseInt(subString, 16)); } } }
转载请注明原文地址: https://www.6miu.com/read-56520.html

最新回复(0)