1. 程式人生 > >PAT 團體程式設計天梯賽 L1-027 出租

PAT 團體程式設計天梯賽 L1-027 出租

下面是新浪微博上曾經很火的一張圖:

一時間網上一片求救聲,急問這個怎麼破。其實這段程式碼很簡單,index陣列就是arr陣列的下標,index[0]=2 對應 arr[2]=1,index[1]=0 對應 arr[0]=8,index[2]=3 對應 arr[3]=0,以此類推…… 很容易得到電話號碼是18013820100。

本題要求你編寫一個程式,為任何一個電話號碼生成這段程式碼 —— 事實上,只要生成最前面兩行就可以了,後面內容是不變的。

輸入格式:

輸入在一行中給出一個由11位數字組成的手機號碼。

輸出格式:

為輸入的號碼生成程式碼的前兩行,其中arr中的數字必須按遞減順序給出。

輸入樣例:
18013820100
輸出樣例:
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
#include <iostream>
#include <vector>
using namespace std;
int main() {
    string s;
    cin >> s;
    int a[10] = {0};
    for(int i = 0; i < 11; i++) {
        a[s[i] - '0']++;
    }//桶排序 
    vector<int> arr;
    for(int i = 9; i >= 0; i--) {
        if(a[i] != 0) {
            arr.push_back(i);
        }
    }//出現過的數字逆序存入arr中 
    vector<int> index;
    for(int i = 0; i < 11; i++) {
        for(int j = 0; j < arr.size(); j++) {
            if((s[i] - '0') == arr[j]) {
                index.push_back(j);
                //遍歷原號碼生成index陣列 
            }
        }
    }
    //輸出結果 
    cout << "int[] arr = new int[]{" << arr[0];
    for(int i = 1; i < arr.size(); i++) {
        cout << "," << arr[i];
    }
    cout << "};" << endl << "int[] index = new int[]{" << index[0];
    for(int i = 1; i < index.size(); i++) {
        cout << "," << index[i];
    }
    cout << "};";
    return 0;
}
如有疑問,歡迎留言。