题目地址:https://www.patest.cn/contests/gplt/L1-027
思路:遍历电话号码,获取号码数值不同的个数,并储存起来(用桶排序的思想,直接将数值作为下标,再判断数组元素的值,然后下标最大的不为0的元素输出下标,即得arr)
index的话,再遍历电话号码,查询与数组arr的值,相等输出相应的下标
注意点:(1)下标与数组元素的值不用弄混淆了就行了。
1 #include<stdio.h> 2 int main(){ 3 char str[12]; 4 int i,j,arr[10]={0},index[12],num; 5 scanf("%s",&str); 6 for(i=0;i<11;i++)arr[str[i]-48]++; 7 printf("int[] arr = new int[]{"); 8 num=0; 9 int zf[10]; 10 for(i=9;i>=0;i--) 11 if(arr[i])zf[num]=i,num++; 12 for(i=0;i<num;i++){ 13 printf("%d",zf[i]); 14 if(i<num-1)printf(","); 15 } 16 printf("};\n"); 17 printf("int[] index = new int[]{"); 18 for(i=0;i<11;i++){ 19 for(j=0;j<num;j++){ 20 if((str[i]-48)==zf[j]){ 21 printf("%d",j); 22 break; 23 } 24 } 25 if(i<10)printf(","); 26 } 27 printf("};\n"); 28 return 0; 29 }