供参考:
#include <stdio.h>
int main()
{
int i, m, j;
char ph[12];
int shu[12] = { 0 }, cnt[12] = { 0 }, indexx[12] = { 0 };
//shu[]记录0~9出现的次数,cnt[]记录出现数字的数值
scanf("%s", ph); //输入电话号码
for (i = 0; i < 11; i++)
shu[ph[i] - '0']++; //相应的数字位计数
for (i = 9, m = 0; i >= 0; i--) {//倒序记录电话出现的数字
if (shu[i])
cnt[m++] = i;
}
for (i = 0; i < 11; i++) {
for (j = 0; j < m; j++) {
if (ph[i] - '0' == cnt[j]) {
indexx[i] = j; //搜索到了下标就是index数组中的值
break;
}
}
}
//以下输出
printf("int[] arr = new int[]{");
for (i = 0; i < m; i++)
printf(i ? ",%d" : "%d", cnt[i]);
printf("};\n");
printf("int[] index = new int[]{");
for (i = 0; i < 11; i++)
printf(i ? ",%d" : "%d", indexx[i]);
printf("};\n");
return 0;
}
我的思路如下:
第一行代码不同部分,可以通过排序,然后将不同手机号码数字提取出来实现;
第二行代码不同部分,可以遍历手机号码数字字符,然后逐一与不同数字数组来比较,当相同时,将此下标补充到第二行代码来实现。
代码如下:
#include <stdio.h>
#include <string.h>
int main(void){
char arr[50]="int[] arr = new int[]{"; // 第一行代码前面的部分先存入数组arr中
char index[50]="int[] index = new int[]{"; // 第二行代码前面的部分先存入数组index中
char phone[12]; // 存储手机号码的字符数组
scanf("%s",phone); // 获取手机号码
char tphone[12] ;
strcpy (tphone,phone); // 将手机号码备份到字符数组tphone中
// 按ASCII码从大到小的顺序排序好字符数组phone中的字符,以便后面提取不同的数字
for(int i=0;i<(strlen(phone)-1);i++){
for(int j=i+1;j<strlen(phone);j++){
char chi = phone[i];
char chj = phone[j];
if(chi<chj){
char temp = phone[i];
phone[i] = phone[j];
phone[j] = temp;
}
}
}
// printf("after sort , phone = %s\n",phone);
int notSameNumber[11];
int i=0,j=0;
char ch=phone[0],pre=' ';
// 提取手机号码中的不同数字
while(phone[i]!='\0'){
ch = phone[i];
if(ch!=pre){
notSameNumber[j]= ch-'0';
j++;
}
pre=ch;
i++;
}
// printf("not same number is :");
// for(int k=0;k<j;k++){
// printf("%d ",notSameNumber[k]);
// }
// printf("\n");
//
int ai = strlen(arr);
int ii = strlen(index);
// 将第一行代码剩余部分补充完整,即将电话号码的不同数字按从大到小的顺序添加到第一行代码中
for(int k=0;k<j;k++){
arr[ai] = notSameNumber[k]+'0';
ai++;
if(k<(j-1)){
arr[ai] = ',';
ai++;
}else{
arr[ai++] = '}';
arr[ai++] = ';';
}
}
arr[ai] ='\0';
// printf("code arr is :%s\n",arr);
// 将11位电话号码按不同数字数组notSameNumber中的下标,补充到第二行代码剩余部分
for(int k=0;k<11;k++){
for(int p=0;p<j;p++){
if(tphone[k]==(notSameNumber[p]+'0')){
index[ii] = p+'0';
// printf("k=%d,tphone[%d]=%c,p=%d,notSameNumber[%d]=%d\n",k,k,tphone[k],p,p,notSameNumber[p]);
ii++;
if(k<10){
index[ii++]=',';
}
}
}
}
index[ii++]='}';
index[ii++]=';';
index[ii] = '\0';
// printf("index code is :%s\n",index);
// 打印结果
printf("%s\n",arr);
// printf("int[] arr = new int[]{8,3,2,1,0};\n");
printf("%s\n",index);
// printf("int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};\n");
return 0;
}
【以下回答由 GPT 生成】
回答:
根据你提供的问题内容,我理解你是想在解答c语言PAT基础题0821L1027时遇到了问题,并且你提供的代码中有一些错误。不幸的是,你并没有在问题中明确描述错误的具体情况,所以我无法提供具体的解决方案。
但是根据你提供的代码片段,我可以看到你可能在代码中插入了HTML标签,这使得你的代码不符合C语言的语法规范。C语言代码应该是纯文本的代码,不应该包含HTML标签。
如果你可以提供具体的代码错误信息或者问题的描述,我会尽力给出解决方案的。
【相关推荐】