1. 程式人生 > >牛客網 - 線上程式設計 - 華為機試 - 字串處理

牛客網 - 線上程式設計 - 華為機試 - 字串處理

題目描述
按照指定規則對輸入的字串進行處理。

詳細描述:

將輸入的兩個字串合併。

對合並後的字串進行排序,要求為:下標為奇數的字元和下標為偶數的字元分別從小到大排序。這裡的下標意思是字元在字串中的位置。

對排序後的字串進行操作,如果字元為‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,則對他們所代表的16進位制的數進行BIT倒序的操作,並轉換為相應的大寫字元。如字元為‘4’,為0100b,則翻轉後為0010b,也就是2。轉換後的字元為‘2’; 如字元為‘7’,為0111b,則翻轉後為1110b,也就是e。轉換後的字元為大寫‘E’。

舉例:輸入str1為”dec”,str2為”fab”,合併為“decfab”,分別對“dca”和“efb”進行排序,排序後為“abcedf”,轉換後為“5D37BF”

輸入描述:

輸入兩個字串

輸出描述:

輸出轉化後的結果

示例1
輸入

dec fab

輸出

5D37BF

C++:

#include<iostream>
#include<string>
#include"math.h"
#include<algorithm>
using namespace std;

string presort(string);
char process(char a);
int main()
{
    string s, s1, s2;
    while
(cin >> s1) { cin.get(); cin >> s2; s = presort(s1+s2); string output = ""; for (int i = 0; i < s.size(); i++) { if (s[i] >= '0' && s[i] <= '9' || s[i] >= 'A' && s[i] <= 'F' || s[i] >= 'a' && s[i] <= 'f'
) { s[i] = process(s[i]); } output += s[i]; } cout << output << endl; } return 0; } string presort(string s) { string s1, s2; s1 = ""; s2 = ""; string result = ""; for (int i = 0; i < s.size(); i++) { if (i % 2 == 0) s1 += s[i]; else s2 += s[i]; } sort(s1.begin(), s1.end()); sort(s2.begin(), s2.end()); int n = s.size(); if (n % 2 == 0) { for (int i = 0; i < s1.size(); i++) { result += s1[i]; result += s2[i]; } } else { for (int i = 0; i < s2.size(); i++) { result += s1[i]; result += s2[i]; } result += s1[s2.size()]; } return result; } int ch2int(char a) { int b = 0; if (a >= '0' && a <= '9') b = a - '0'; else if (a >= 'a'&&a <= 'f') b = a - 'a' + 10; else if (a >= 'A'&&a <= 'F') b = a - 'A' + 10; return b; } int reverse_ten2two(int a) { int ch[4] = { 0 }; int sum = 0; for (int i = 0; i < 4; i++) { ch[i] = a % 2; a /= 2; sum += ch[i] * pow(2, 3 - i); } return sum; } char int2ch(int a) { char b; if (a >= 0 && a <= 9) b = a + '0'; else if (a >= 10 &&a <= 15) b = a - 10 + 'A'; return b; } char process(char a) { int i = ch2int(a); int ri = reverse_ten2two(i); char b = int2ch(ri); return b; }

Python:

while True:
    try:
        def preinput(s):
            s = s.replace(' ','')
            a = ''; b = '';
            for i,v in enumerate(s): #這邊可以直接a = s[::2],b=a[1::2]
                if i % 2 == 0:
                    a = a + v
                else:
                    b = b + v
            a = ''.join(sorted(a))
            b = ''.join(sorted(b))
            result = ''
            for i in range(len(b)):
                result = result + a[i]
                result = result + b[i]
            if(len(a) - len(b)):
                result += a[len(b)]
            return result

        def transform(a):
            if '0' <= a <= '9':
                a = int(a)
            elif 'a' <= a <= 'f':  #這裡可以直接對a.upper()進行判斷,減少一次條件判斷
                a = ord(a) - ord('a') + 10
            elif 'A' <= a <= 'F':
                a = ord(a) - ord('A') + 10
            a = bin(a).lstrip('0b')
            if(len(a) < 4):  #這邊可以直接s.rjust(4,'0')
                a = (4 - len(a)) * '0' + a
            a = a[::-1]
            sum = 0
            for i,v in enumerate(a):
                sum = sum + int(v) * pow(2, 3 - i)
            a = sum
            if a > 9:  
                a = chr(a - 10 + ord('A'))
            else:
                a = '%s'%a
            return a
        s = input()
        a = preinput(s)
        s = ""
        for i,v in enumerate(a):
            if '0' <= v <= '9' or 'a' <= v <= 'f' or 'A' <= v <= 'F':
                s = s + transform(v)
            else:
                s = s + v
        print(s)
    except:
        pass