出租,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;
}