本人第一次写博客,希望分享下自己做这道题的想法哈哈,如有不足,望各位高手批评指正。
解题思路:由题意知,输入是11位电话号码,可用字符数组存放,然后观察题目,很容易看出,我们需要用一个数组存放11位电话号码中互不重复的数字,可采用“桶排序”思想,设置一个整型数组存放1~9的数字并进行排序,存放入一个新的整型数组,这个数组便可用来进行对字符数组的遍历,遍历字符数组,找出相匹配的值,将下标依次存放在index数组,完成题目输出即可。
代码实现如下:
#include<stdio.h>
#include<string.h>
int main()
{
int m=0,n=0;
char s[11]={0};//初始化字符数组
int a[10]={0},b[10]={0},index[11]={0};
scanf("%s",s);
for(int i=0;i<11;i++)
{
int t=s[i]-'0';//将字符数组中每一位字符转换为数字
a[t]++;//将t做为下标,并自增,表示这个数字出现过
if(a[t]>1) a[t]=1;//重复数字记为出现一次
}
//将出现过的数字从高到低依次存放入新数组,用于之后遍历字符数组时的匹配
for(int i=9;i>=0;i--)
{
if(a[i]!=0)
{
b[m]=i;
m++;
}
}
for(int i=0;i<11;i++)
{
for(int j=0;j<m;j++)
{
if((s[i]-'0')==b[j])//出现匹配,把下标存放进index数组,并用break跳出循环,进行下一轮遍历
{
index[n]=j;
n++;
break;
}
}
}
//完成题目输出
printf("int[] arr = new int[]{");
for(int i=0;i<m;i++)
{
printf("%d",b[i]);
if(i!=m-1) printf(",");//当不为最后一次循环时,先打印数字,再打印逗号
}
printf("};\n");
printf("int[] index = new int[]{");
for(int i=0;i<11;i++)
{
printf("%d",index[i]);
if(i!=10) printf(",");//当不为最后一次循环时,先打印数字,再打印逗号
}
printf("};\n");
return 0;
}
标签:11,字符,遍历,int,027,出租,存放,PTAL1,数组
From: https://blog.csdn.net/2403_88254028/article/details/144160535