题意
要求将给出的电话号码转换成两行代码进行输出
思路
1.用一个字符串变量来接住输入的电话号码。
2.统计我们电话号码中出现了哪些数字
3.按输出样例的格式顺序,从大到小输出,于此同时,用另一个数组来装我们电话号码出现过的数字,也是从大到小。
4.构造完c后,用字符串s中的一个个字母和c逐一比较确定出下标,然后输出即可
坑点
新数组的输出中最后一个数字后没有空格,
算法一:模拟
代码
#include<bits/stdc++.h>
using namespace std;
int a[10],b[11],c[10];
signed main()
{
string s;
cin>>s;//首先,我们用一个字符串变量来接住输入的电话号码。
for(int i=0;i<11;i++)
{
a[s[i]-'0']=1;//统计我们电话号码中出现了哪些数字(数组a)
}
int k=0,n=0;
for(int l=0;l<10;l++)
{
if(a[l]==1)
{
n++;
}
}
cout<<"int[] arr = new int[]{";
for(int j=9;j>=0;j--)//.按输出样例的格式顺序,从大到小输出
{
if(a[j]==1&&k<n-1) //用另一个数组c来装我们电话号码出现过的数字,也是从大到小。
{
cout<<j<<",";
c[k]=j;
k++;
}
else if(a[j]==1)
{
cout<<j;
c[k]=j;
k++;
}
}
cout<<"};"<<endl;
cout<<"int[] index = new int[]{";
int len=s.size();
for(int p=0;p<len;p++)//构造完c后,用字符串s中的一个个字母和c逐一比较确定出下标,然后输出即可
{
for(int t=0;t<k;t++)
{
if(s[p]-'0'==c[t]&&p<10)
{
cout<<t<<",";
}
else if(s[p]-'0'==c[t])
{
cout<<t;
}
}
}
cout<<"};"<<endl;
}
总结
难度中等,需注意输出的格式,最后一个数后没有空格。