您的位置:首页 > 其它

2014|2015 华为机考简单题解体报告

2016-04-05 00:06 316 查看
这是2014(2015?)年华为机考简单题简单,倒数第二题就是为了好玩(或者虐CPU)…..

/*
2015 huawei test.
Author:hujian
Time:2016/4/4 nankai
*/

/*
* 1. 60 points problem
*/
#include <iostream>
#include <list>
#include <string>

using namespace std;

//#define _A_1_
#ifdef  _A_1_
//a
//input m,n,and m means the num of input string.
//and the n means the output length.
//
int main()
{
int m, n,nxlength=0;
string input,output="";
cin >> m >> n;
while (m--){
cin >> input;
if (input.length() == n){
cout << input << endl;
}
else if (input.length() < n){
nxlength = n - input.length();
string zero(nxlength, '0');
cout << input + zero << endl;
}
else{
int index = input.length() / n;
int ii = 0;
while (index--){
output = input.substr(ii*n, n);
cout << output << endl;
ii++;
}
if (input.length() % n != 0){
int till = ii*n;
output = input.substr(till);
nxlength = n - output.length();
string zero(nxlength, '0');
cout << output + zero << endl;
}
}
}
exit(EXIT_SUCCESS);
}
#endif  //end of a 1

//#define  _A_2_
#ifdef   _A_2_
//ok,just trans string to number
// yi er san si wu liu qi ba jiu
//  1  2  3  4   5  6  7  8  9
// yi  er sa si  wu li qi  ba ji
int main()
{
string   input;
while (cin >> input)
{
int index = 0;
for (int i = 0; i < input.length(); i++){
switch (input[i])
{
case 'y':
putchar('1');
index += 2;
break;
case 'e':
putchar('2');
index += 2;
break;
case 's':
if (input[i+1] == 'a'){
putchar('3');
index += 3;
}
else{
putchar('4');
index += 2;
}
break;
case 'w':
putchar('5');
index += 2;
break;
case 'l':
putchar('6');
index += 2;
break;
case 'q':
putchar('7');
index += 2;
break;
case 'b':
putchar('8');
index += 2;
break;
case 'j':
putchar('9');
index += 2;
break;
}
}
}
exit(EXIT_SUCCESS);
}
#endif   //end of a 2

//#define  _A_3_
#ifdef   _A_3_
//just sort   so easy if use the STL's list
//
int main()
{
list<char> l;
string  in;
cin >> in;
for (int i = 0; i < in.length(); i++){
l.push_back(in[i]);
}
l.unique(); //hehe
l.sort();   //hehe
list<char>::iterator lit;
for (lit = l.begin(); lit != l.end(); lit++){
cout << *lit;
}
putchar('\n');
exit(EXIT_SUCCESS);
}
#endif  //end of a 3

#define  _A_4_
#ifdef   _A_4_
/*
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入:       正整数,等式右边的数字
输出:       使该等式成立的个数
样例输入:5
样例输出:21
*/

#include<algorithm>

string solve(int op[])
{
// 1 3 5 7 9 11 13 15
string res = "1_2_3_4_5_6_7_8_9";
switch (op[0]){
case 0:res[1] = '+'; break;
case 1:res[1] = '-'; break;
case 2:res[1] = 'x'; break;
}
switch (op[1]){
case 0:res[3] = '+'; break;
case 1:res[3] = '-'; break;
case 2:res[3] = 'x'; break;
}
switch (op[2]){
case 0:res[5] = '+'; break;
case 1:res[5] = '-'; break;
case 2:res[5] = 'x'; break;
}
switch (op[3]){
case 0:res[7] = '+'; break;
case 1:res[7] = '-'; break;
case 2:res[7] = 'x'; break;
}
switch (op[4]){
case 0:res[9] = '+'; break;
case 1:res[9] = '-'; break;
case 2:res[9] = 'x'; break;
}
switch (op[5]){
case 0:res[11] = '+'; break;
case 1:res[11] = '-'; break;
case 2:res[11] = 'x'; break;
}
switch (op[6]){
case 0:res[13] = '+'; break;
case 1:res[13] = '-'; break;
case 2:res[13] = 'x'; break;
}
switch (op[7]){
case 0:res[15] = '+'; break;
case 1:res[15] = '-'; break;
case 2:res[15] = 'x'; break;
}
string::iterator sit;
for (sit = res.begin(); sit != res.end(); sit++){
if (*sit == 'x'){
res.erase(sit);
}
}
return res;
}
//get the number and the ops and push stack
#include <stack>
#include<algorithm>
#include <Windows.h>

stack<string> ps(string str)
{
stack<string> st;
reverse(str.begin(), str.end());
while (!st.empty()) st.pop();
string now = "";
for (int i = 0; i <= str.length(); i++){
if (str[i] != ' '){
if (isdigit(str[i])){
now += str[i];
}
else{
reverse(now.begin(), now.end());
if (now!=" ")
st.push(now);
now = "";
now += str[i];
if (now != " ")
st.push(now);
now = "";
}
}
}
return st;
}

int  calc(stack<string> s)
{
s.pop();
if (s.empty()||s.size()<3) return -100000;
int res= 0;
//pp1 and pp3 is number,pp2 is op
string pp1= "",pp2="",pp3="";
//first tp
pp1 = s.top();
s.pop();
pp2 = s.top();
s.pop();
pp3 = s.top();
s.pop();
int tmp = 0;
if (pp2 == "+"){
tmp = atoi(pp1.c_str()) + atoi(pp3.c_str());
}
else{
tmp = atoi(pp1.c_str()) - atoi(pp3.c_str());
}
res += tmp;
while (!s.empty()){
pp2 = s.top(); s.pop();
pp3 = s.top(); s.pop();
if (pp2 == "+"){
res+= atoi(pp3.c_str());
}
else{
res-= atoi(pp3.c_str());
}
}
return res;
}

// 0 means +
// 1 means -
// 2 means null
int ops[8];

int main()
{
int result;
int cnt = 0;
cin >> result;
int i1, i2, i3, i4, i5, i6, i7, i8,i;
for (i1 = 0; i1 < 3;i1++)
for (i2 = 0; i2< 3; i2++)
for (i3 = 0; i3 < 3; i3++)
for (i4 = 0; i4 < 3; i4++)
for (i5= 0; i5 < 3; i5++)
for (i6 = 0; i6 < 3; i6++)
for (i7 = 0; i7 < 3; i7++)
for (i8 = 0; i8 < 3; i8++){
ops[0] = i1;
ops[1] = i2;
ops[2] = i3;
ops[3] = i4;
ops[4] = i5;
ops[5] = i6;
ops[6] = i7;
ops[7] = i8;
//todo....
int tmp=0;
tmp= calc(ps(solve(ops)));
if (tmp == result){
cnt++;
cout << solve(ops) << "=" << result << endl;
}
}
cout << "Total:" << cnt << endl;
exit(EXIT_SUCCESS);
}
#endif  //end of a 4

//#define  _A_5_
#ifdef   _A_5_
/*
输入整数(n是小于9位数的整数),当作字符串处理,
看是否有相同的子串,如1212,相同子串是12,
141516则没有子串(子串长度必须大于等于2)。
若有相同子串则输出1,否则输出0
输入:长度小于9的整数
输出1或者0
*/
int main()
{
string in,pre,nex;
int minlen=2, maxlen = 0;
while (cin >> in){
maxlen = in.length() / 2;
bool ok = false;
for (int len = minlen; len <=maxlen; len++){//ctl the com length
for (int i = 0; i <=in.length() - len; i++){
pre = in.substr(i, len);
for (int k = i + 1; k + len <=in.length(); k++){
nex = in.substr(k, len);
if (pre == nex){
cout << "1" << endl;
ok = true;
goto out;
}
}
}
}
out:
if (!ok){
cout << "0" << endl;
}
}
exit(EXIT_SUCCESS);
}
#endif  //end of a 5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: