出租,emmm…给这类题目起个名字吧,就叫她数组的嵌套问题吧
arr[index[0]]=1
arr[index[1]]=8
arr[index[2]]=0
arr[index[3]]=1
以此类推…
思路:
(1)tel数组用来存放电话号码,用string类型或者char数组,便于求长度操作。
(2)出了tel数组和arr,index三个数组外,还需要定义一个temp数组用来做标记。
(3)第一次遍历,将tel中出现过的数字在temp中标志为-1并存入arr数组中(arr数组中元素唯一)。
(4)采用sort逆排序,arr数组完成。
(5)双层循环在tell数组与arr数组中找相等元素,得到对应的下标并将j存入index[i],index数组完成。
(6)按照要求输出。

#include<iostream>
#include<functional>
#include<algorithm>

using namespace std;

int main()
{
	string tel;//用来存储电话
	int arr[11];//arr数组
	int index[11];//index数组是arr数组的下标
	getline(cin,tel);
	int temp[11]={0};//temp数组用来做标记,初始值为0 
    int all=0;//all记录arr中的元素个数 
    for(int i=0;i<11;i++)
    {//tel遍历
    	if(temp[tel[i]-48]==0)
    	{//避免多次标记 -将tel中出现过的数字, 
    		temp[tel[i]-48]=-1;//标记为-1 
    		arr[all]=tel[i]-48;//存入arr数组 
    		all++;
		}
	}
	sort(arr,arr+all,greater<int>());//sort逆排序 
	for(int i=0;i<11;i++)
	{//双层for循环在tell和arr数组中寻找相等元素,得到此时的i与j 
		for(int j=0;j<all;j++)
		{
			if(tel[i]-48==arr[j])
			{//将j存入index[i],结束内层循环 
				index[i]=j;
				break;
			}
		}
	}
    //输出arr数组 
    printf("int[] arr = new int[]{%d",arr[0]);
    for(int i=1;i<all;i++)
        printf(",%d",arr[i]);
    printf("};\n");
    //输出index数组 
    printf("int[] index = new int[]{%d",index[0]);
    for(int i=1;i<11;i++)
        printf(",%d",index[i]);
    printf("};\n");		
	return 0;
}