一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index
数组就是arr
数组的下标,index[0]=2
对应 arr[2]=1
,index[1]=0
对应 arr[0]=8
,index[2]=3
对应 arr[3]=0
,以此类推…… 很容易得到电话号码是18013820100
。
本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。
输入格式:
输入在一行中给出一个由11位数字组成的手机号码。
输出格式:
为输入的号码生成代码的前两行,其中arr
中的数字必须按递减顺序给出。
输入样例:
18013820100
输出样例:
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
#include<stdio.h>
#include<string.h>
int main() {
char s[12];
gets(s);
int a[10] = {0}, flag = 0, count = 0,ar[10],j=0;
//ar用来储存arr因为求idenx的时候需要用
// 将电话号码中的数字个数进行计数,并存储到数组a中
for (int i = 0; i < 11; i++) {
if (s[i] >= '0' && s[i] <= '9') {
a[s[i] - '0']++;
count++;
}
}
// 输出数组arr
printf("int[] arr = new int[]{");
for (int i = 9; i >= 0; i--) {
if (a[i] != 0) {
if (flag == 0) {
printf("%d", i);
ar[j++]=i;
flag = 1;
} else {
printf(",%d", i);
ar[j++]=i;
}
}
}
printf("};\n");//下面根据电话号码和ar来确定idenx
//思路是,获取电话的每一位,然后找到他在ar的位置然后输出
flag=0;//再次利用flag
for(int i=0;i<11;i++)//电话号码的每一位
for(int m=0;m<j;m++){
if(ar[m]==s[i]-'0'&&flag==0)//如果arr数组里面第m位是电话的第i位相等,且是第一次输出
{
printf("int[] index = new int[]{%d",m);
flag=1;
}
else if(ar[m]==s[i]-'0'&&flag==1)
printf(",%d",m);}
printf("};");
return 0;
}