PTA出租

畫船雨眠發表於2020-12-22

出租

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

一時間網上一片求救聲,急問這個怎麼破。其實這段程式碼很簡單,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<stdio.h>
#include<string.h>

void del(char* a, int n);
void sort(char* a, int n);
          
int main(void){
    int length;
    char a[11],b[11];
    
    for(int i=0;i<11;i++){
        scanf("%c",&a[i]);
        b[i]=a[i];
    }
    
    del(a,11);
    length=strlen(a);
    sort(a,length);
    //printf("%d\n",length);
    printf("int[] arr = new int[]");
    
    for(int i=0;i<length;i++){
        if(i==0)printf("\{%c",a[i]);
        else printf(",%c",a[i]);
        if(i==length-1)printf("\};\n");
    }
    printf("int[] index = new int[]");
    for(int i=0;i<11;i++){
        if(i==0)printf("\{");
        for(int j=0;j<length;j++){
            if(i<10&&b[i]==a[j])printf("%d,",j);
            if(i==10&&b[i]==a[j])printf("%d",j);
        }
    }
    printf("\};\n");
    return 0;
}
          
void del(char* a, int n) {
	int k=0;
	for (int i = 0; i < n ; i++) {
		for (int j = i + 1; j < n ; j++) {
			if (a[i] == a[j])a[j] = '\0';
		}
	}
	for (int i = 0; i < n; i++) {
		if (a[i] != '\0')a[k++] = a[i];
	}
	a[k] = '\0';
}
void sort(char* a, int n) {
	char temp;
	for (int i = 0; i < n-1; i++) {
		for (int j = 0; j < n - 1 - i; j++) {
			if (a[j] < a[j + 1]) {
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
}