题意
输入一个电话号码,为电话号码生成代码,分为两行
第一行为电话号码中的不同数字的递减,
第二行为每个数字在电话号码中出现的下标顺序
题解
- 1.可以用字符串读入号码(较好),也可以用长整型读入号码,11个0是测试点2的数据
- 去重后按递减排序,模拟
- 3.一一对应输出
坑点
没什么坑点 11个0 注意一下
#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--)//.按输出样例的格式顺序,从大到小输出
{//用另一个数组c来装我们电话号码出现过的数字,也是从大到小。
if(a[j]==1&&k<n-1)
{
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;
}