## Here is the link to the question http://www.spoj.com/problems/SBANK/
## i am getting sigsev error on the spoj.i have used mergesort to sort the account number ##
#include<stdio.h>
#include<string.h>
void merge(int,int,int);
char a[10000][33];
**合并函数以对数组进行排序。由于帐号超过18位,我使用字符串库函数来比较存储在字符串**
中的帐号 void mergesort(int low,int high)
{ int mid;
if(high>low)
{
mid=(high+low)/2;
mergesort(low,mid);
mergesort(mid+1,high);
merge(low,mid,high);
}
else
return;
}
void merge(int low,int mid,int high)
{
int i=low;
int j=mid+1;
int k=0;
char temp[10000][33];
while(i<=mid&&j<=high)
{
if(strcmp(a[i],a[j])<0)
{
strcpy(temp[k],a[i]);
i++;
}
else
{
strcpy(temp[k],a[j]);
j++;
}
k++;
}
while(i<=mid)
{
strcpy(temp[k],a[i]);
k++;
i++;
}
while(j<=high)
{
strcpy(temp[k],a[j]);
k++;
j++;
}
k=0;
while(low<=high)
{
strcpy(a[low],temp[k]);
low++;
k++;
}
}
主要驾驶功能
在其中一家互联网银行中,每天都有数千项业务正在进行。由于某些客户比其他客户更积极地开展业务,因此一些银行账户在运营清单中多次出现。您的任务是按升序对银行帐号进行排序。如果帐户在列表中出现两次或更多次,请在帐号后面写下重复次数。帐户的格式如下:例如2个控制数字,银行的8位代码,识别所有者的16位数字(以4位数字组成)(在每行的末尾只有一个空格) : 30 10103538 2222 1233 6160 0142
银行是实时机构,他们需要快速解决方案。如果您觉得可以在非常严格的时间限制内迎接挑战,请继续!一个设计良好的快速语言排序算法很可能会成功。
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int i,n;
int ch;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
gets(a[i]);
printf("\n");
mergesort(0,n-1);
int j=1;
for(i=0;i<n-1;i++)
{
if(strcmp(a[i],a[i+1])==0)
{ j++;
continue;
}
else
{
printf("%s %d\n",a[i],j);
j=1;
}
}
printf("%s %d\n",a[i],j);
}
return 0;
}
[Problem to sort bank accounts number of 26 digit][1]
答案 0 :(得分:0)
如果字符串长度超过32个字符或者超过10000个字符,则可能有一个固定大小的数组溢出。
在未正确初始化的索引处访问数据也可能导致越界读取。