![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
c语言求助!!急!! 帮我看看下面网址的这道题怎么做吧,谢谢啦!!!
http://202.120.80.191/problem.php?problemid=2948...
http://202.120.80.191/problem.php?problemid=2948
展开
3个回答
展开全部
#include <stdio.h>
//A, B, C对应2 D, E, F对应3
//G, H, I对应4 J, K, L对应5
//M, N, O对应6 P, Q,R, S对应7
//T, U, V对应8 W, X, Y,Z对应9
//'-'对应0
//其他不变
char exchange(char a)
{
if(a=='-')
return 0;
if(a=='0')
return '0';
if(a=='1')
return '1';
if(a=='2' || (a>='A' && a<='C'))
return '2';
if(a=='3' || (a>='D' && a<='F'))
return '3';
if(a=='4' || (a>='G' && a<='I'))
return '4';
if(a=='5' || (a>='J' && a<='L'))
return '5';
if(a=='6' || (a>='M' && a<='O'))
return '6';
if(a=='7' || (a>='P' && a<='S'))
return '7';
if(a=='8' || (a>='T' && a<='V'))
return '8';
if(a=='9' || (a>='W' && a<='Z'))
return '9';
return a;
}
//比较a[]和b[]的大小
//return -1 如果a[]<b[]
//return 0 如果a[]=b[]
//return 1 如果a[]>b[]
int compare(char *a,char* b)
{
int i;
for(i=0;i<8;i++)
{
if(a[i]<b[i])
return -1;
else if(a[i]>b[i])
return 1;
}
return 0;
}
//交换a[8]和b[8]
void swap(char *a,char* b)
{
char ch;
int i;
for(i=0;i<8;i++)
{
ch=a[i];
a[i]=b[i];
b[i]=ch;
}
}
main()
{
char input[100][80];//保存所有电话
int index[100];//依次记录无重复电话在input[][]中的索引
int n[100];//对应index[]索引的个数
int i,j,k;
char ch;
char count=6;//电话号码总数
//输入
scanf("%d",&count);
for(i=0;i<count;i++)
{
scanf("%s",input[i]);
}
//处理input[count][80]成为input[count][8]
for(i=0;i<count;i++)
{
for(j=0,k=0;input[i][j]!=NULL;j++)
{
ch=exchange(input[i][j]);
if(ch==0)
continue;
else if(ch=='\n')
break;
input[i][k++]=ch;
}
index[i]=i;
n[i]=0;
}
//排序
for(i=0;i<count-1;i++)
{
for(j=0;j<count-1-i;j++)
{
if( compare(input[j],input[j+1]) > 0 )
{
swap(input[j],input[j+1]);
}
}
}
//记录无重复索引在index[],个数n[]
index[0]=0;
n[0]=1;
for(i=1,k=0;i<count;i++)
{
if( compare (input[index[k]],input[i]) ==0)
{
n[k]++;
}
else
{
k++;
index[k]=i;
n[k]=1;
}
}
//输出
count=k+1;
for(i=0;i<count;i++)
{
for(k=0;k<8;k++)
{
if(k==4)
putchar('-');
putchar(input[index[i]][k]);
}
printf("\t%d\n",n[i]);
}
return 0;
}
//A, B, C对应2 D, E, F对应3
//G, H, I对应4 J, K, L对应5
//M, N, O对应6 P, Q,R, S对应7
//T, U, V对应8 W, X, Y,Z对应9
//'-'对应0
//其他不变
char exchange(char a)
{
if(a=='-')
return 0;
if(a=='0')
return '0';
if(a=='1')
return '1';
if(a=='2' || (a>='A' && a<='C'))
return '2';
if(a=='3' || (a>='D' && a<='F'))
return '3';
if(a=='4' || (a>='G' && a<='I'))
return '4';
if(a=='5' || (a>='J' && a<='L'))
return '5';
if(a=='6' || (a>='M' && a<='O'))
return '6';
if(a=='7' || (a>='P' && a<='S'))
return '7';
if(a=='8' || (a>='T' && a<='V'))
return '8';
if(a=='9' || (a>='W' && a<='Z'))
return '9';
return a;
}
//比较a[]和b[]的大小
//return -1 如果a[]<b[]
//return 0 如果a[]=b[]
//return 1 如果a[]>b[]
int compare(char *a,char* b)
{
int i;
for(i=0;i<8;i++)
{
if(a[i]<b[i])
return -1;
else if(a[i]>b[i])
return 1;
}
return 0;
}
//交换a[8]和b[8]
void swap(char *a,char* b)
{
char ch;
int i;
for(i=0;i<8;i++)
{
ch=a[i];
a[i]=b[i];
b[i]=ch;
}
}
main()
{
char input[100][80];//保存所有电话
int index[100];//依次记录无重复电话在input[][]中的索引
int n[100];//对应index[]索引的个数
int i,j,k;
char ch;
char count=6;//电话号码总数
//输入
scanf("%d",&count);
for(i=0;i<count;i++)
{
scanf("%s",input[i]);
}
//处理input[count][80]成为input[count][8]
for(i=0;i<count;i++)
{
for(j=0,k=0;input[i][j]!=NULL;j++)
{
ch=exchange(input[i][j]);
if(ch==0)
continue;
else if(ch=='\n')
break;
input[i][k++]=ch;
}
index[i]=i;
n[i]=0;
}
//排序
for(i=0;i<count-1;i++)
{
for(j=0;j<count-1-i;j++)
{
if( compare(input[j],input[j+1]) > 0 )
{
swap(input[j],input[j+1]);
}
}
}
//记录无重复索引在index[],个数n[]
index[0]=0;
n[0]=1;
for(i=1,k=0;i<count;i++)
{
if( compare (input[index[k]],input[i]) ==0)
{
n[k]++;
}
else
{
k++;
index[k]=i;
n[k]=1;
}
}
//输出
count=k+1;
for(i=0;i<count;i++)
{
for(k=0;k<8;k++)
{
if(k==4)
putchar('-');
putchar(input[index[i]][k]);
}
printf("\t%d\n",n[i]);
}
return 0;
}
展开全部
首先,作一个函数,让用户输入,然后用条件语句转换映躴,
第二步:作第二个函数:字符包括连接线,共九个时,换行,换一行,就记录一次。
第三步:作第三个函数统计相同的字符,并输出个数。
第四步:用主函数调用这三个函数,搞定,当然,全部用代码转化出来OK
第二步:作第二个函数:字符包括连接线,共九个时,换行,换一行,就记录一次。
第三步:作第三个函数统计相同的字符,并输出个数。
第四步:用主函数调用这三个函数,搞定,当然,全部用代码转化出来OK
追问
能告诉我一下代码吗?
还有 用条件语句转换映躴 这是什么?
追答
不是,是影射,刚才打错了,影目上要求的呀,输入哪几个号码,它自功转换成指的号码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubble(char *p[],int n);
void bubble(char *p[],int n)
{
char *t;
int i,j;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(p[j][79]<p[j+1][79]){
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
}
void main()
{
int n,i,j,k;
char a[26]={
'2','2','2',
'3','3','3',
'4','4','4',
'5','5','5',
'6','6','6',
'7','7','7','7',
'8','8','8',
'9','9','9','9'};
char **p;
scanf("%d",&n);
getchar();
p=(char **)malloc(n*sizeof(char *));
for(i=0;i<n;i++){
p[i]=malloc(80*sizeof(char));
gets(p[i]);
fflush(stdin);
}
for(i=0;i<n;i++){
for(j=0;p[i][j];j++){
if(p[i][j]>='A'&&p[i][j]<='Z'){
p[i][j]=a[p[i][j]-'A'];
}
}
}
for(i=0;i<n;i++){
for(j=0,k=0;p[i][j];j++){
p[i][j-k]=p[i][j];
if(p[i][j]=='-'){
k++;
}
}
p[i][j-k]=0;
p[i][79]=1;
}
for(i=n-1;i;i--){
for(j=0;j<i;j++)
if(!strcmp(p[i],p[j])){
p[j][79]+=p[i][79];
free(p[i]);
p[i]=0;
}
}
for(i=0,k=0;i<n;i++){
p[i-k]=p[i];
if(!p[i]) k++;
}
bubble(p,n-k);
for(i=0;i<n-k;i++){
for(j=0;j<4;j++){
printf("%c",p[i][j]);
}
printf("-");
for(;j<8;j++){
printf("%c",p[i][j]);
}
printf(" %d\n",p[i][79]);
}
}
#include <stdlib.h>
#include <string.h>
void bubble(char *p[],int n);
void bubble(char *p[],int n)
{
char *t;
int i,j;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(p[j][79]<p[j+1][79]){
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
}
void main()
{
int n,i,j,k;
char a[26]={
'2','2','2',
'3','3','3',
'4','4','4',
'5','5','5',
'6','6','6',
'7','7','7','7',
'8','8','8',
'9','9','9','9'};
char **p;
scanf("%d",&n);
getchar();
p=(char **)malloc(n*sizeof(char *));
for(i=0;i<n;i++){
p[i]=malloc(80*sizeof(char));
gets(p[i]);
fflush(stdin);
}
for(i=0;i<n;i++){
for(j=0;p[i][j];j++){
if(p[i][j]>='A'&&p[i][j]<='Z'){
p[i][j]=a[p[i][j]-'A'];
}
}
}
for(i=0;i<n;i++){
for(j=0,k=0;p[i][j];j++){
p[i][j-k]=p[i][j];
if(p[i][j]=='-'){
k++;
}
}
p[i][j-k]=0;
p[i][79]=1;
}
for(i=n-1;i;i--){
for(j=0;j<i;j++)
if(!strcmp(p[i],p[j])){
p[j][79]+=p[i][79];
free(p[i]);
p[i]=0;
}
}
for(i=0,k=0;i<n;i++){
p[i-k]=p[i];
if(!p[i]) k++;
}
bubble(p,n-k);
for(i=0;i<n-k;i++){
for(j=0;j<4;j++){
printf("%c",p[i][j]);
}
printf("-");
for(;j<8;j++){
printf("%c",p[i][j]);
}
printf(" %d\n",p[i][79]);
}
}
更多追问追答
追问
还是不行啊,编译没通过啊
追答
你把主函数返回值改为
int
主函数最后加上
return 0;
再试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询