c语言北大ACM—OJ-1002的一个小问题 20
#include<stdio.h>#include<string.h>intmain(){inti,j,k=0,l,n,count[1000]={0},num=0;cha...
#include <stdio.h>
#include <string.h>
int main()
{
int i,j,k=0,l,n,count[1000]={0},num=0;
char call[1000][20],call_[1000][20];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",call_[i]);
}
for(i=0;i<n;i++)
{
l=0;
for(j=0;call_[i][j]!='\0';j++)
{
if(call_[i][j]!='-') /*将字符'-'去掉*/
{
call[k][l]=call_[i][j];
l++;
}
}
k++;
}
for(i=0;i<n;i++) /*将字母字符全部转换为数字*/
{
for(j=0;j<7;j++)
{
if(call[i][j]>=65&&call[i][j]<=67)
call[i][j]='2';
else if(call[i][j]>=68&&call[i][j]<=70)
call[i][j]='3';
else if(call[i][j]>=71&&call[i][j]<=73)
call[i][j]='4';
else if(call[i][j]>=74&&call[i][j]<=76)
call[i][j]='5';
else if(call[i][j]>=77&&call[i][j]<=79)
call[i][j]='6';
else if(call[i][j]>=80&&call[i][j]<=83&&call[i][j]!=81)
call[i][j]='7';
else if(call[i][j]>=84&&call[i][j]<=86)
call[i][j]='8';
else if(call[i][j]>=87&&call[i][j]<=89)
{
call[i][j]='9';
}
}
}
for(i=0;i<n;i++) /*比较字符是否相同*/
{
for(j=0;j<n;j++)
{
num=0;
for(k=0;k<7;k++)
{
if(call[i][k]==call[j][k])
{
num++; /*统计单个字符相等*/
}
}
if(num==7)
{
count[i]++;
}
}
}
for(i=0;i<n;i++) /*字符的输出*/
{
if(count[i]>1)
{
for(j=0;j<7;j++)
{
printf("%c",call[i][j]);
if(j==2)
{
printf("-");
}
}
printf(" %d\n",count[i]);
}
else
{
num++; /*统计有相等字符串的个数*/
}
}
if(num==n)
printf("No duplicates\n");
return 0;
}
这是我自己的代码·~输出结果不会···希望大家帮下·· 展开
#include <string.h>
int main()
{
int i,j,k=0,l,n,count[1000]={0},num=0;
char call[1000][20],call_[1000][20];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",call_[i]);
}
for(i=0;i<n;i++)
{
l=0;
for(j=0;call_[i][j]!='\0';j++)
{
if(call_[i][j]!='-') /*将字符'-'去掉*/
{
call[k][l]=call_[i][j];
l++;
}
}
k++;
}
for(i=0;i<n;i++) /*将字母字符全部转换为数字*/
{
for(j=0;j<7;j++)
{
if(call[i][j]>=65&&call[i][j]<=67)
call[i][j]='2';
else if(call[i][j]>=68&&call[i][j]<=70)
call[i][j]='3';
else if(call[i][j]>=71&&call[i][j]<=73)
call[i][j]='4';
else if(call[i][j]>=74&&call[i][j]<=76)
call[i][j]='5';
else if(call[i][j]>=77&&call[i][j]<=79)
call[i][j]='6';
else if(call[i][j]>=80&&call[i][j]<=83&&call[i][j]!=81)
call[i][j]='7';
else if(call[i][j]>=84&&call[i][j]<=86)
call[i][j]='8';
else if(call[i][j]>=87&&call[i][j]<=89)
{
call[i][j]='9';
}
}
}
for(i=0;i<n;i++) /*比较字符是否相同*/
{
for(j=0;j<n;j++)
{
num=0;
for(k=0;k<7;k++)
{
if(call[i][k]==call[j][k])
{
num++; /*统计单个字符相等*/
}
}
if(num==7)
{
count[i]++;
}
}
}
for(i=0;i<n;i++) /*字符的输出*/
{
if(count[i]>1)
{
for(j=0;j<7;j++)
{
printf("%c",call[i][j]);
if(j==2)
{
printf("-");
}
}
printf(" %d\n",count[i]);
}
else
{
num++; /*统计有相等字符串的个数*/
}
}
if(num==n)
printf("No duplicates\n");
return 0;
}
这是我自己的代码·~输出结果不会···希望大家帮下·· 展开
2个回答
展开全部
本人的烂代码,参考下下。感觉你的效率很低,而且部分地方还有问题。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int map[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};
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
int main()
{
int n, *d,i,j,maxNum=0,dul,temp;
char key[50];
scanf("%d",&n);
d=(int *)malloc(sizeof(int)*n);
for (i=0;i<n;i++)
{
d[i]=0;
}
for(i=0;i<n;i++)
{
scanf("%s",key);
for (j=0;j<strlen(key);j++)
{
if (key[j]!='-')
{
if (key[j]>='A')
{
d[i]=d[i]*10+map[key[j]-'A'];
}
else
{
d[i]=d[i]*10+key[j]-'0';
}
}
}
}
//快排
qsort(d,n,sizeof(int),cmp);
temp=d[0]; dul=1;
for (i=1;i<n;i++)
{
if (d[i]==temp)
{
dul++;
}
else
{
if (dul>1)
{
maxNum=dul>maxNum?dul:maxNum;
printf("%03d-%04d %d\n",d[i-1]/10000,d[i-1]%10000,dul);
}
temp=d[i];
dul=1;
}
}
if (dul>1)
{
maxNum=dul>maxNum?dul:maxNum;
printf("%03d-%04d %d\n",d[i-1]/10000,d[i-1]%10000,dul);
}
if (maxNum<2)
{
printf("No duplicates. \n");
}
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int map[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};
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
int main()
{
int n, *d,i,j,maxNum=0,dul,temp;
char key[50];
scanf("%d",&n);
d=(int *)malloc(sizeof(int)*n);
for (i=0;i<n;i++)
{
d[i]=0;
}
for(i=0;i<n;i++)
{
scanf("%s",key);
for (j=0;j<strlen(key);j++)
{
if (key[j]!='-')
{
if (key[j]>='A')
{
d[i]=d[i]*10+map[key[j]-'A'];
}
else
{
d[i]=d[i]*10+key[j]-'0';
}
}
}
}
//快排
qsort(d,n,sizeof(int),cmp);
temp=d[0]; dul=1;
for (i=1;i<n;i++)
{
if (d[i]==temp)
{
dul++;
}
else
{
if (dul>1)
{
maxNum=dul>maxNum?dul:maxNum;
printf("%03d-%04d %d\n",d[i-1]/10000,d[i-1]%10000,dul);
}
temp=d[i];
dul=1;
}
}
if (dul>1)
{
maxNum=dul>maxNum?dul:maxNum;
printf("%03d-%04d %d\n",d[i-1]/10000,d[i-1]%10000,dul);
}
if (maxNum<2)
{
printf("No duplicates. \n");
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询