那么一道题该怎么做??
思路:先把电话号码的每个数字转换成一个数组的下标(除去电话号码中的重复的数字),再把这个数组的下标由大到小存放到另外一个数组中, 再通过这个去重后的电话号码的数组找回电话号码所对应的下标,得到对应的下标的数组。具体细节参考以下代码及注释。
int main() { char tel[12] = { 0 }; int arr[10] = { 0 }; int index[12] = { 0 }; int a[10] = { 0 }; scanf("%s", tel); int i = 0; for (i = 0; i < 11; i++) { a[tel[i] - '0'] = 1;//a数组的下标和电话号码的数字相同,例如1813820100 //中的1就是a[1]中的1,同理8也是a[8]中的8 } int num = 0; for (i = 9; i >= 0; i--) { if (a[i] == 1)//利用标记好的数值为1的元素的下标找回电话号码的数字并逆序排放 { //得到的arr数组就是{8,3,2,1,0}; arr[num] = i; num++; } } for (i = 0; i < 11; i++)//遍历电话号码 { int k = 0; for (k = 0; k < 10; k++)//找到电话号码的每一个数字对应的下标 { if (tel[i] - '0' == arr[k]) { break; } } index[i] = k;//找到的k就是对应的下标,把它写入下标数组中 } //下面这个打印就当然不是问题啦 printf("int[] arr = new int[]{"); printf("%d", arr[0]); for (i = 1; i < num; i++) { printf(",%d", arr[i]); } printf("};\n"); printf("int[] index = new int[]{"); printf("%d", index[0]); for (i = 1; i < 11; i++) { printf(",%d", index[i]); } printf("};\n"); return 0; }