写一个程序居然出现了system error,从来都没遇到过的,请大家帮我看看,指点一下……

u010672692 2013-06-02 11:52:52
Sorting Again


Time Limit: 2000MS Memory Limit: 65535KB
Submissions: 461 Accepted: 93

Description新春过后的第一次比赛,相信大家都已经准备好了。那么就为大家热下身吧。问题很简单,对一组输入的数据进行排序。 对输入的数据,我们有如下的约定:所有的输入数据都为正整数,且都不大于300000000。但是输入的数据可能会有重复,排序时,应将重复的数据合并,即同样的数只处理一次。

Input只有一组数据,以0结尾。

Output输出排序后的数据(不含0),其中相同的数应只显示1个。


相邻数之间有一个空格


最后是一个空格和一个换行


Sample Input

1 2 2 3 4 0

Sample Output

1 2 3 4
我的代码:
#include<stdio.h>
int a[300000001];
int main()
{
int m,max,i;
for(i=0;;i++)
{
scanf("%d",&m);
if(m==0) break;
a[m]++;
if(m>max)
max=m;
}
for(i=0;i<=max;i++)
{
if(a[i]>0)
{
printf("%d ",i);
}
}
printf("\n");
return 0;
}
...全文
280 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010672692 2013-06-05
  • 打赏
  • 举报
回复
今天改良了一下,通过了,哈哈 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int m,max=0,i,*a,t; a=(int *)malloc(300000*sizeof(int)); memset(a,0,300000*sizeof(int)); for(i=0;;i++) { scanf("%d",&m); if(m==0) break; (*(a+m))++; if(m>max) max=m; } for(i=0;i<=max;i++) { if(*(a+i)>0) { printf("%d ",i); } } printf("\n"); return 0; }
ynlbj 2013-06-03
  • 打赏
  • 举报
回复
我运行了没错啊,应该和楼主的编译器有关,重装一下吧
lsjfdjoijvtghu 2013-06-03
  • 打赏
  • 举报
回复
a[m]++是干什么?是这里错了?
赵4老师 2013-06-03
  • 打赏
  • 举报
回复
Memory Limit: 65535KB
AnYidan 2013-06-03
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
Memory Limit: 65535KB
++
baichi4141 2013-06-03
  • 打赏
  • 举报
回复
既然不需要记录相同数据的个数,就用1个bit而不是1个int来标记某个数值是否出现过
u010672692 2013-06-03
  • 打赏
  • 举报
回复
交上去是system error,怎么改啊
hugett 2013-06-03
  • 打赏
  • 举报
回复
改成这样比较好。。

#include <stdio.h>
#include <stdlib.h>

int a[30000];

int cmp(const void *pa, const void *pb){
	return *(int*)pa - *(int*)pb;
}

int main()
{
	int m = 0;
	for(; ; ++m){
		scanf("%d", &a[m]);
		if(a[m] == 0) break;
	}
	qsort(a, m, sizeof(int), cmp);
	printf("%d", a[0]);
	for(int i = 1; i < m; ++i){
		if(a[i] > a[i-1]) printf(" %d", a[i]);
	}
	putchar('\n');
	return 0;
}
hugett 2013-06-03
  • 打赏
  • 举报
回复
首先。。数组可能开不了那么大。。那就不能用这种方法。。要先输入所有的数。。然后排序再输出。。 如果能开这么大的数组的话,那max应该初始化。。

#include<stdio.h>
int a[300000001];
int main()
{
	int m,max = 0,i;//max要初始化。。
	for(i=0;;i++)
	{
		scanf("%d",&m);
		if(m==0) break;
		a[m]++;
		if(m>max) max=m;
	}
	for(i=0;i<=max;i++)
	{
		if(a[i]>0)
		{
			printf("%d ",i);
		}
	}
	printf("\n");
	return 0;
}
bewinged 2013-06-03
  • 打赏
  • 举报
回复
int a[300000001]; 用不着搞这么大吧, 我编译一下挂了, 改小点。
ly1chee 2013-06-03
  • 打赏
  • 举报
回复
引用 3 楼 Kenier 的回复:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int StrToInt(const char* str)
{
    int length, sign, i, j;
    unsigned num = 0;
    while (*str) {
        if (isspace(*str))
            ++str;
        else
            break;
    }
    if ('\0' == *str)
        return 0;
    if (isdigit(*str))
        sign = 0;
    else if ('+' == *str)
        sign = 0, ++str;
    else if ('-' == *str)
        sign = 1, ++str;
    else
        return 0;
    length = strlen(str);
    if (0 == length)
        return 0;
    for (i = 0, j = 1; i < length - 1; ++i)
        j *= 10;
    for (i = 0; i < length; ++i, j /= 10) {
        if (!isdigit(str[i])) {
            num /= j * 10;
            break;
        }
        num += (str[i] - '0') * j;
    }
    if (sign) {
        if (num > 0x80000000u)
            num = 0x80000000u;
    } else {
        if (num > 0x7FFFFFFFu)
            num = 0x7FFFFFFFu;
    }
    return sign ? -1 * num : num;
}
通过了。
发错贴了!!
ly1chee 2013-06-03
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int StrToInt(const char* str)
{
    int length, sign, i, j;
    unsigned num = 0;
    while (*str) {
        if (isspace(*str))
            ++str;
        else
            break;
    }
    if ('\0' == *str)
        return 0;
    if (isdigit(*str))
        sign = 0;
    else if ('+' == *str)
        sign = 0, ++str;
    else if ('-' == *str)
        sign = 1, ++str;
    else
        return 0;
    length = strlen(str);
    if (0 == length)
        return 0;
    for (i = 0, j = 1; i < length - 1; ++i)
        j *= 10;
    for (i = 0; i < length; ++i, j /= 10) {
        if (!isdigit(str[i])) {
            num /= j * 10;
            break;
        }
        num += (str[i] - '0') * j;
    }
    if (sign) {
        if (num > 0x80000000u)
            num = 0x80000000u;
    } else {
        if (num > 0x7FFFFFFFu)
            num = 0x7FFFFFFFu;
    }
    return sign ? -1 * num : num;
}
通过了。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧