L1-027 出租 (20分)
 

下面是新浪微博上曾经很火的一张图:

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1index[1]=0 对应 arr[0]=8index[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<bits/stdc++.h> 
#include <iostream>
#include <cstring>
#include <string>
#include <iomanip>        // 格式化输入输出 
#include <cmath>
#include <cstdlib> 
#include <vector>

using namespace std;

void Function_027(char & j1,char & j2) {
    char temp;
    temp = j1;
    j1 = j2;
    j2 = temp;
}

int main()
{
    char phone[11];
    char arr[11];
    char index[11];
    memset(arr,'a',sizeof(char) * 11);
//    memset(index,'a',sizeof(char) * 11);
    scanf("%s",phone);
    int k = 0;
    for(int i = 0;i < 11;i++) {
        int sign = 1;
        for(int j = 0;j < i;j++) {
            if(phone[j] == phone[i])
                sign = 0;
        }
        if(sign)
            arr[k++] = phone[i];
        for(int j = k - 1;j > 0;j--) {
            if(arr[j] > arr[j - 1])
                Function_027(arr[j],arr[j - 1]);
        }
    }
    int i = 0;
    cout<<"int[] arr = new int[]{";
    while(arr[i] != 'a') {
        if(i == 0)
            cout<<arr[i];
        else
            cout<<","<<arr[i];
        i++;
    }
    cout<<"};"<<endl;
    
    i= 0; 
    cout<<"int[] index = new int[]{";
    while(i < 11) {
        for(int j = 0;j < k;j++)
            if(phone[i] == arr[j]) {
                if(i == 0)
                    cout<<j;
                else
                    cout<<","<<j;
                break;
            }    
        i++;
    }
    cout<<"};"<<endl;
    return 0;
}

 

posted on 2020-08-21 12:58  夜_归_人  阅读(228)  评论(0编辑  收藏  举报